嗨,当我使用this answer获取类的列表自动构建一些结构。崩溃处理__NSAtom类对象
我的代码看起来像这样:
NSMutableDictionary *result = [NSMutableDictionary dictionaryWithCapacity: 32];
Class* classes = NULL;
int numClasses = objc_getClassList(NULL, 0);
if (numClasses > 0) {
classes = (Class*)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
for (int index = 0; index < numClasses; index++) {
Class nextClass = classes[index];
if ([nextClass isSubclassOfClass: BaseCmd.class] &&
![BaseCmd isSubclassOfClass: nextClass]) {
BaseCmd *cmd = [nextClass new];
result[cmd.name] = cmd;
}
}
free(classes);
}
return result;
因此,从修改的答案很简单。直到__NSAtom
类处理它很好地工作(index = 1548
numClasses = 7628
所以它不是出界的问题)。
当达到这一__NSAtom
类是有崩溃。日志显示:
*** NSForwarding: warning: object 0x7fff74978938 of class '__NSAtom' does not implement methodSignatureForSelector: -- trouble ahead
*** NSForwarding: warning: object 0x7fff74978938 of class '__NSAtom' does not implement doesNotRecognizeSelector: -- abort
崩溃来自条件isSubclassOfClass
。
为什么它不起作用?我该如何解决它?
我使用的是OS X的优胜美地。
您应该使用'objc_copyClassList'。它显着更高效。 (而不是两次获取互斥锁,它只获取一次,以及更少的条件分支)。 –