¿Cómo podría reescribir la siguiente clase de utilidad para obtener todos los valores de cadena de clase para un tipo específico - usando las funciones de tiempo de ejecución de Objective-c como se muestra a continuación?realloc() & ARC
La documentación ARC establece específicamente que realloc debe ser evitado y también me sale el siguiente error del compilador en este esta línea:
classList = realloc(classList, sizeof(Class) * numClasses);
"conversión implícita de un tipo de puntero no Objective-C 'void * 'to' __unsafe_unretained Class * 'no se permite con ARC "
El siguiente código es una referencia al artículo original que se puede encontrar 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;
}
Su ayuda será muy apreciada.
Realice un lanzamiento explícito (void *) classList. También considere no usar realloc. ¿Qué estás tratando de lograr aquí? – Dustin
¿Realmente necesita ejecutar el código con ARC, o sería aceptable que ejecute el código en modo no ARC (indicador '-fno-objc-arc' en la configuración de generación de destino para las clases donde desea desactivar ARC). Ver: http://stackoverflow.com/questions/6646052/how-can-i-disable-arc-for-a-single-file-in-a-project –
@WolfgangSchreurs Gracias, me olvidé por completo de la opción del indicador del enlazador . – RynoB