class 和 object 在Object-C的定义
typedef struct objc_class *Class; //一个不透明含糊的类型,表示一个Object-C类
//对象即为表示类的实例
typedef struct objc_object{
Class isa;
}*id;
objc_class结构体的实现
struct objc_class{
struct objc_class *isa;
struct objc_class *super_class;
struct objc_ivar_list *ivars;
struct objc_method_list **methodlist;
struct objc_cache *cache;
struct objc_protocol_list *protocols;
long version;
long info;
long instance_size;
const char *name;
};
isa指针
是一个类型为objc_class指针,是和class一个类型的指针,那么我们是不是可以这样说:一个以objc_class指针指向的所有东西都可以当作一个objc对象来对待.
super_class父类
我们知道所有类都继承于NSObject或者NSProxy,那么NSObject是所以类的父类,NSObject和NSProxy的父类是null
name
const char *name一个C类型的字符串,用来表示类的名字
在运行时可以通过方法idobjc_getClass(constchar *aClassName)来得到这个类的名字,通过idObjc_getMetaClass(const char * aClassName)来得到该类的metaclass
version版本信息
默认值是0,可以通过运行时通过方法class_setVersion修改版本信息,通过class_getVersion来得到版本信息
info
供运行时提供的一些位标识符
instance_size
这个类实例变量的大小,内含了从父类继承下来的实例变量
ivars
用来存储每一个实例变量的地址
cache
用来存储最近使用方法,提高效率优先
protocols
用来存储声明遵守的正式协议
Person *p1 = [Person new];
[Person 方法名] 类方法
[p1 方法名] 对象方法
网友评论