gpt4 book ai didi

ios - 项目 Objective-c 中的类列表

转载 作者:可可西里 更新时间:2023-11-01 04:30:15 29 4
gpt4 key购买 nike

我正在 Objective C(iOS 应用程序)中进行一些反射(reflection)并构建自定义测试环境,并且我正在尝试获取我在项目中创建的类的列表,以便我可以迭代这些并查看对于某些方法声明,使用反射。

我的问题是检索该列表。我不想将每个类手动输入到我的反射类中的列表或某个静态字段中,而是让它对任何项目都是通用的。

列表可以是类名列表,也可以是 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com