美文网首页
今日所学20160105

今日所学20160105

作者: laingzai | 来源:发表于2016-01-05 18:02 被阅读32次

    1. runtime 基本概念

    基本数据结构:Class,Method,SEL,IMP,id

    Class:指向objc_class的结构体指针,objc_class结构体如下:

    Method:指向objc_method的结构体指针,可以从objc_class中获取objc_method_list,objc_method结构体如下:

    SEL:指向objc_selector的结构体指针,用来表示一个方法的名字,结构:typedef struct objc_selector *SEL;

    IMP:函数指针,指向的函数包含一个接受消息的对象id,函数的方法名字,以及函数的若干个参数, 结构:typedef void (*IMP)(void /* id, SEL, ... */ );

    id:指向objc_object结构体的指针,objc_object中只包含一个指向objc_class的isa指针,所以任何继承NSObject的对象都可以用id表示;

    2. KVO实现代码

    HPNotificationCenter类:用于判断是否已经创建过对应的子类的类对象

    HPTargetClassManager类:用于判断相同子类的不同实例对象,根据内存地址判断,并创建共同的方法,class, dealloc方法等

    HPTargetClass类:重写观察对象的set方法

    创建实例之后,打印其指向的地址,没有变化,只有用object_getClass()发现isa指针发生变化,借助于NSObject+DLIntrospection, po [object_getClass(subClassA) instanceMethods]能看到对应的实例方法发生变化

    相关文章

      网友评论

          本文标题:今日所学20160105

          本文链接:https://www.haomeiwen.com/subject/uomihttx.html