Jak mógłbym przepisać następującą klasę narzędzi, aby uzyskać wszystkie wartości łańcucha klasy dla określonego typu - przy użyciu funkcji środowiska wykonawczego Objective-c, jak pokazano poniżej?realloc() i ARC
Dokumentacja ARC wyraźnie stwierdza, że realloc należy unikać, a ja również otrzymuję następujący błąd kompilatora na ten wiersz:
classList = realloc(classList, sizeof(Class) * numClasses);
„niejawna konwersja typu wskaźnika non-Objective-C„void * "do" __unsafe_unretained Class * "jest niedozwolone przez ARC"
Poniższy kod jest odniesieniem do oryginalnego artykułu, który można znaleźć pod numerem 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;
}
Twoja pomoc będzie bardzo cenna.
Wykonaj wyraźną klasę rzutowania (void *). Rozważ także nie używanie realloc. Co próbujesz osiągnąć tutaj? – Dustin
Czy naprawdę potrzebujesz uruchomić kod za pomocą ARC, lub byłoby to możliwe do uruchomienia kodu w trybie innym niż ARC (flaga '-fno-objc-arc' w ustawieniach de-budowania dla klas, w których chcesz wyłącz ARC). Zobacz: http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project –
@WolfgangSchreurs Dzięki, całkowicie zapomniałem o opcji flagi linkera . – RynoB