
/usr/include/objc/objc.h和runtime.h找到对class和object的定义
**typedef struct objc_class *Class; //一个objc_class的指针typedef struct objc_object { Class isa; } *ID;** //ID(任意对象)是一个objc_object结构类型的指针
objc_class的结构体:
struct objc_class { struct objc_class* isa; struct objc_class* super_class; const char* name; long version; long info; long instance_size; struct objc_ivar_List* ivars; struct objc_method_List** methodLists; struct objc_cache* cache; struct objc_protocol_List* protocols;};
isa:是一个 objc_class 类型的指针,看到这里,想起我前面的引申解读了没?内存布局以一个 objc_class 指 针为开始的所有东东都可以当做一个 object 来对待! 这就是说 objc_class 或者说类其实也可以当做一个
objc_object 对象来对待!对象是对象,类也是对象,是不是有点混淆?别急,ObjC 发明(or 重用)了 一个术语来区分这两种不同的对象:类对象(class object)与实例对象(instance object)。OK,名 称混淆的问题解决,下面我将使用这两个术语来区分不同的对象,而使用“对象”这一术语来泛指所有的对 象。ObjC 还对类对象与实例对象中的 isa 所指向的类结构作了不同的命名:类对象中的 isa 指向类结构 被称作 Metaclass,Metaclass 存储类的 static 类成员变量与 static 类成员方法(+开头的方法);实 例对象中的 isa 指向类结构称作 class(普通的),class 结构存储类的普通成员变量与普通成员方法(- 开头的方法)。
一张类关系的继承图来说明类继承之间的关系:
一些runtime的函数使用 Class objc_allocateClasspair ( Class superclass,const char *name,size_t extraBytes );创建一个类,返回新类对象的指针。 class_addMethod(Class aClass,@selector(),(IMP)functioin,”v@:”) 3. 总结
以上是内存溢出为你收集整理的Cocoa Runtime学习笔记全部内容,希望文章能够帮你解决Cocoa Runtime学习笔记所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)