我在Objective C(iOS应用)中进行了一些思考,并构建了一个自定义的测试环境,并且试图获取我在项目中创建的类的列表,因此我可以对其进行迭代并寻找某些方法。通过使用反射进行声明。
我的问题是要检索该列表。我不想手动将每个类输入到反射类的列表或某个静态字段中,而是让它对于任何项目都是通用的。
该列表可以是类名称或Class
类型的对象的列表。
我确实设法在文档中找到了objc_getClassList()
函数:https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html
但这会创建所有类的列表,而我将无法确定哪些是用户定义的,哪些不是用户定义的。我试图在Internet上寻求指导,但是没有找到答案或类似问题的运气。
任何帮助表示赞赏!
编辑:
现在,我还尝试使用objc_copyImageNames()
,希望能够以图像的形式找到我的项目,然后使用objc_copyClassNamesForImage()
来获取列表,但由于项目不被视为图像,所以运气不好,我猜值得一试。
最佳答案
您可以使用objc_getClassList()
文档中的代码
并使用[NSBundle bundleForClass:class]
检查每个类是否已在您的
应用:
int numClasses;
Class * classes = NULL;
classes = NULL;
numClasses = objc_getClassList(NULL, 0);
if (numClasses > 0 )
{
classes = (__unsafe_unretained Class *)malloc(sizeof(Class) * numClasses);
numClasses = objc_getClassList(classes, numClasses);
for (int i = 0; i < numClasses; i++) {
Class c = classes[i];
NSBundle *b = [NSBundle bundleForClass:c];
if (b == [NSBundle mainBundle]) {
NSLog(@"%s", class_getName(c));
// ...
}
}
free(classes);
}
关于ios - 项目Objective-c中的类别列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20032166/