Cocoa Runtime学习笔记

Cocoa Runtime学习笔记,第1张

概述/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_c

/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学习笔记所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1051772.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-25
下一篇2022-05-25

发表评论

登录后才能评论

评论列表(0条)

    保存