有没有任何方法可以获取(通过调试)Objective-c 中未知对象的所有实例变量的列表?
我使用 lldb 进行调试,但我承认我不太了解它。
显然我无法查看这个未知对象的标头。
我需要在调试时执行此操作,但如果不可能,我可以在运行时使用替代方法。
我找到了这个帖子:如何列出 Objective-C 中对象的所有字段? https://stackoverflow.com/questions/1213901/how-do-i-list-all-instance-variables-of-a-class-in-objective-c但是,据我了解,我需要有一个已知的类(我需要对象的标头)
有什么建议吗?
利用您链接的问题的已接受答案的代码,您唯一需要做的就是将其包装到一个方便的方法中,以便您可以在调试期间随时调用它。在你的地方我会写一个类别扩展NSObject,添加一个返回a的方法NS词典与所有伊瓦尔;这是一个例子:
- (NSDictionary*) ivars
{
NSMutableDictionary* ivarsDict=[NSMutableDictionary new];
unsigned int count;
Ivar* ivars=class_copyIvarList([self class], &count);
for(int i=0; i<count; i++)
{
Ivar ivar= ivars[i];
const char* name = ivar_getName(ivar);
const char* typeEncoding = ivar_getTypeEncoding(ivar);
[ivarsDict setObject: [NSString stringWithFormat: @"%s",typeEncoding] forKey: [NSString stringWithFormat: @"%s",name]];
}
free(ivars);
return ivarsDict;
}
然后给定您不知道其类型的对象,如果它直接或间接继承自NSObject你只需要打印从此方法返回的字典:
(lldb) po [someObject ivars]
学分:如何列出 Objective-C 中对象的所有字段? https://stackoverflow.com/questions/1213901/how-do-i-list-all-instance-variables-of-a-class-in-objective-c/1213979#1213979
PS:你需要导入objc/运行时.h .
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)