Cocoa Runtime学习笔记

/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 结构存储类的普通成员变量与普通成员方法(- 开头的方法)。

一张类关系的继承图来说明类继承之间的关系:

instance object,class,metaclass 的 isa 与 super_class 关系图


一些runtime的函数使用

  1. Class objc_allocateClassPair ( Class superclass, const char *name, size_t extraBytes );
    创建一个类,返回新类对象的指针。
  2. class_addMethod(Class aClass, @selector(), (IMP)functioin,”v@:”)
  3. 3.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值