KVO键值观察通知依赖于 NSObject 的两个方法

键-值观察实现细节(Apple 文档:https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/KeyValueObserving/Articles/KVOImplementation.html)
自动键-值观察是由叫isa-swizzling的技术实现的。
isa指针,如其名称所指,指向维护分发表的对象的类。该分发表实际上包含了指向实现类中的方法的指针,和其它数据。
当某个对象的属性注册了中观察者时,当该被观察对象的isa指针被修改为指向一个中间类,而不是真实的类。因此isa指针的值并不一定反映实例的实际类。
你的程序应当使用class方法来确定实例对象的类,而不是依赖于isa指针

KVO键值观察通知依赖于 NSObject 的两个方法_第1张图片
KVO.png

KVC主要通过isa-swizzling,来实现[site setValue:@"sitename" forKey:@"name"];
编译器处理成:
SEL sel = sel_get_uid ("setValue:forKey:");
IMP method = objc_msg_lookup (site->isa,sel);
method(site, sel, @"sitename", @"name");

你可能感兴趣的:(KVO键值观察通知依赖于 NSObject 的两个方法)