前言:iOS的开发语言objective-c,它的真实面目是它不是真正的面向对象语言,而抽象理解为此而已。其实它就是C+,有个公式可以很好地诠释那就是
OC = C + Runtime; 接下来我们就好好讲讲在Runtime下的objc-class。准备资料,objc4-646/runtime。
一:Class定义
1.1 小小说明一下objc-api.h里的OBJC_ISA_AVAILABILITY:
/*介绍一下__attribute__((deprecated))的作用,__attribute是给函数、变量、类做属性说明的关键字,deprecated是弃用原先的进行兼容
若是__OBJC2__,原先的类,编译器发出警告*/
1
2
3
4
5
6
7
|
#if !defined(OBJC_ISA_AVAILABILITY)
# if __OBJC2__
# define OBJC_ISA_AVAILABILITY __attribute__((deprecated))
# else
# define OBJC_ISA_AVAILABILITY /* still available */
# endif
#endif
|
1
2
3
4
|
typedef
struct
objc_method *Method;
typedef
struct
objc_ivar *Ivar;
typedef
struct
objc_category *Category;
typedef
struct
objc_property *objc_property_t;
|
1.2 接下来就是runtime.h里的Class的定义:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
struct
objc_class {
Class isa OBJC_ISA_AVAILABILITY;
//每个Class都有一个isa指针
#if !__OBJC2__
Class super_class OBJC2_UNAVAILABLE;
//父类
const
char
*name OBJC2_UNAVAILABLE;
//类名
long
version OBJC2_UNAVAILABLE;
//类版本
long
info OBJC2_UNAVAILABLE;
//!*!供运行期使用的一些位标识。如:CLS_CLASS (0x1L)表示该类为普通class; CLS_META(0x2L)表示该类为metaclass等(runtime.h中有详细列出)
long
instance_size OBJC2_UNAVAILABLE;
//实例大小
|