2012-01-04 87 views
17

有没有人设法使用arc下的objc_getClassList,而不是关闭文件?在圆弧下使用objc_getClassList

最根本的问题是其中一个参数是类指针的C数组。

+0

好问题。 ARC在这种情况下似乎相当尴尬。我禁用了这个文件,而不是花时间去弄清楚如何在它周围跳舞,但是和我一样,我很想知道是否有一种相对简单的方法来启用ARC。 – jlehr 2012-01-04 17:22:11

回答

32

此代码应根据ARC工作:

int numClasses; 
Class *classes = NULL; 

classes = NULL; 
numClasses = objc_getClassList(NULL, 0); 
NSLog(@"Number of classes: %d", numClasses); 

if (numClasses > 0) 
{ 
    classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses); 
    numClasses = objc_getClassList(classes, numClasses); 
    for (int i = 0; i < numClasses; i++) { 
     NSLog(@"Class name: %s", class_getName(classes[i])); 
    } 
    free(classes); 
} 
+2

注意,如果您想在运行此代码的上下文之外使用其中一个Class对象(例如,作为使用此函数的函数的返回值),则可以从__unsafe_unretained Class中获取ARC内存管理的类通过做NSClassFromString(NSStringFromClass(classes [i]))。我不确定是否有更高效的方法来获得课堂副本,但这种方式似乎对我有用。如果你直接返回类[i],你将最终得到一个悬挂指针,因为该对象在免费(类)调用中被释放。 – stuckj 2013-11-25 21:25:24