Come potrei essere in grado di riscrivere la seguente classe di utilità per ottenere tutti i valori di stringa di classe per un tipo specifico - utilizzando i Objective C-runtime funzioni come illustrato di seguito?realloc() & ARC
La documentazione ARC prevede espressamente che realloc dovrebbe essere evitato e ho anche il seguente errore del compilatore in questa questa linea:
classList = realloc(classList, sizeof(Class) * numClasses);
la conversione implicita di un tipo puntatore non Objective-C 'vuoto" * 'to' __unsafe_unretained Class * 'non è consentito con ARC "
Il seguente codice è un riferimento all'articolo originale che può essere trovato 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;
}
Il vostro aiuto sarà molto apprezzato.
Esegui un elenco di classi cast esplicito (void *). Inoltre, considera di non utilizzare realloc. Cosa stai cercando di realizzare qui? – Dustin
non si ha realmente bisogno di eseguire il codice con ARC, o sarebbe accettabile per voi per eseguire il codice in modalità non-ARC ('-fno-objc-arc' bandiera impostazioni de compilazione di destinazione per le classi in cui si desidera disabilitare ARC). Vedere: http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project –
@WolfgangSchreurs Grazie, ho completamente dimenticato l'opzione del linker bandiera . – RynoB