在arc下使用objc_getClassList

Wil*_*sch 17 iphone objective-c-runtime ios automatic-ref-counting

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

基本问题是其中一个参数是一个C类的Class指针.

Ole*_*ann 35

此代码应在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);
}
Run Code Online (Sandbox Code Playgroud)

  • 需要注意的是,如果要在运行此代码的上下文之外使用其中一个Class对象(例如,从使用此代码的函数返回),则可以从__unsafe_unretained Class获取ARC内存管理类.做NSClassFromString(NSStringFromClass(classes [i])).我不确定是否有更有效的方法来获取Class副本,但这种方式似乎对我有用.如果你只是直接返回类[i],你将最终得到一个悬空指针,因为对象在free(classes)调用中被释放. (2认同)