我該如何重寫下面的工具類來獲取特定類型的所有類字符串值 - 使用如下所示的Objective-c運行時函數?realloc()&ARC
電弧文檔特別指出的realloc應避免與我還獲得以下編譯器錯誤有關此這一行:
classList = realloc(classList, sizeof(Class) * numClasses);
「非目標C指針類型的隱式轉換「void *的'to'__unsafe_unretained Class *'不允許使用ARC「
以下代碼是對原始文章的參考,可以找到here。
+ (NSArray *)classStringsForClassesOfType:(Class)filterType {
int numClasses = 0, newNumClasses = objc_getClassList(NULL, 0);
Class *classList = NULL;
while (numClasses < newNumClasses) {
numClasses = newNumClasses;
classList = realloc(classList, sizeof(Class) * numClasses);
newNumClasses = objc_getClassList(classList, numClasses);
}
NSMutableArray *classesArray = [NSMutableArray array];
for (int i = 0; i < numClasses; i++) {
Class superClass = classList[i];
do {
superClass = class_getSuperclass(superClass);
if (superClass == filterType) {
[classesArray addObject:NSStringFromClass(classList[i])];
break;
}
} while (superClass);
}
free(classList);
return classesArray;
}
您的幫助將不勝感激。
做一個明確的轉換(void *)classList。也考慮不使用realloc。你想在這裏完成什麼? – Dustin 2012-07-11 14:18:12
你是否真的需要用ARC運行代碼,或者在非ARC模式下運行代碼是可以接受的(在你想要的類的目標構建設置中的'-fno-objc-arc'標誌禁用ARC)。請參閱:http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project – 2012-07-11 14:22:21
@WolfgangSchreurs謝謝,我完全忘記了鏈接器標誌選項。 – RynoB 2012-07-17 11:32:32