随着我对KVO和KVC的了解越来越多,我变得好奇 -
NSObject在访问setter方法时如何提供自动KVO?
如果我创建一个名为setName的访问者的新对象,
当有人打电话时,观察者如何得到通知
[obj setName:@“Mystery”];
感谢您的反馈
答案 0 :(得分:11)
我总是向人们解释“Cocoa中没有什么是神奇的东西;它只是代码。”但KVO与魔术接壤。它被称为isa-swizzling。您的类在运行时(任何人第一次观察到您)转换为动态生成的子类,该子类重载所有getter和setter。对-class
的调用将连接到您并返回旧类,因此除非在调试器中直接查看isa
指针,否则您将看不到魔术子类。
注意到KVO必须离奇是Cocoa启蒙的重要一步。祝贺。