我正在研究KVC是如何工作的,我设置了一个符号断点_class_getVariable
,当向对象发送setValue:forKey:
消息时,将调用该函数。
所以我写了这个:
extern Ivar _class_getVariable(Class cls, const char *name, Class *memberOf);
并在构建设置中向-Wl,-undefined,dynamic_lookup
添加标记Other Linker Flags
以指定此未定义的符号将动态查找。但是当我调用这个函数时,我仍然会从dyld中得到错误:
dyld: lazy symbol binding failed: Symbol not found: __class_getVariable
Referenced from: /Users/Stan/Library/Developer/Xcode/DerivedData/Obj-C-aiaspdiyxsvqblfjkvreemnpekov/Build/Products/Debug/Obj-C
Expected in: flat namespace
dyld: Symbol not found: __class_getVariable
Referenced from: /Users/Stan/Library/Developer/Xcode/DerivedData/Obj-C-aiaspdiyxsvqblfjkvreemnpekov/Build/Products/Debug/Obj-C
Expected in: flat namespace
Program ended with exit code: 9
我查过了objc-rumtime的源代码,该功能确实存在于那里。有什么方法可以称之为吗?
更新
我在runtime.h中找到了一个函数class_getInstanceVariable
,作为获取名称的ivar的替代品。但我仍然对如何拨打_class_getVariable
感到好奇。
提前致谢:)