每日1道题(day1)

2017-05-26  本文已影响164人  IreneWu

请介绍一下isa指针,怎么用,用来干嘛?

答:每一个对象内部都有一个isa指针,对象的isa 指针就指向它的真实类型它所属的类.

isa指针指向顺序:类对象->元类对象->NSObject元类对象。NSObject元类对象 的 isa 指向自己。

作用:系统提供的 KVO 的实现,就利用了动态地修改 isa 指针的值的技术。

(万物皆对象。类也是对象,他是meteClass(元类)的实例。)

扩展:来源:http://www.jianshu.com/p/a0aaf0ffe6e1

当我们调用某个类的方法时,如果这个类的方法列表里没有该方法,则会去找这个类的父类的方法列表。这种机制就是通过objc_class的第二个变量super_class指针实现的。并且这种继承关系会扩展到元类。

KVO的实现原理 :

KVO是通过"isa-swizzling"技术来实现的,当一个对象注册观察者时,这个对象的isa指针被修改指向一个中间类。

KVO 的实现依赖于 Objective-C 强大的 runtime。当观察A类型的对象时,在运行时会创建了一个继承自A类的NSKVONotifying_A类,且为NSKVONotifying_A重写观察属性的setter 方法,setter 方法会负责在调用原 setter 方法之前和之后,通知所有观察者属性值的更改情况

假设A类有个name属性,NSKVONotifying_A重写setName方法:

- (void) setName:(NSString *)name 
{     
    [self willChangeValueForKey:@"name"];     
    [super setName:name];     
    [self didChangeValueForKey:@"name"]; 
}
上一篇 下一篇

猜你喜欢

热点阅读