ios - 获取所有本地类的列表

标签 ios objective-c nsobject dladdr

我想获取所有已加载到我的 iOS 项目中的 native 类(NSString、NSNumber、int、float、NSSet、NSDictionary)。

即,如果我创建了一个名为“TestClass”的自定义类,我不想将其列出...

我已经有一个代码,但它返回所有加载的类的名称,我可以修改代码以将列表限制为仅 native 类吗?

#import <objc/runtime.h>
#import <dlfcn.h>
#import <mach-o/ldsyms.h>


unsigned int count;
const char **classes;
Dl_info info;

dladdr(&_mh_execute_header, &info);
classes = objc_copyClassNamesForImage(info.dli_fname, &count);

for (int i = 0; i < count; i++) {
  NSLog(@"Class name: %s", classes[i]);
  Class class = NSClassFromString ([NSString stringWithCString:classes[i] encoding:NSUTF8StringEncoding]);
  // Do something with 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];
        NSLog(@"%s", class_getName(c));
    }
    free(classes);
}

(代码来自 objc_getClassList 文档。)

要限制列表,您可以检查从中加载类的bundle,例如

Class c = classes[i];
NSBundle *b = [NSBundle bundleForClass:c];
if (b != [NSBundle mainBundle])
    ...

对于所有未从您的应用程序加载的类。

关于ios - 获取所有本地类的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19298553/

相关文章:

ios - 退出 UIViewController 时禁用 "Save Password"操作表?

ios - 当 MFMessegeComposeViewController 最终加载时我需要一个回调

ios - 将 GameKit key 添加到您的信息 plist 文件(错误)

iphone - 如何使 NSObject "global"/在所有方法中可用?

ios - 无法将字符串设置为 URLWithString

ios - 在 Swift 中使用框架

ios - playbackLikelyToKeepUp 和 AVPlayerItemStatusReadyToPlay 有什么区别?

objective-c - 没有 Interface Builder 的 Cocoa,初始化应用程序 Controller 的实例?

ios - Swift 中的 Equatable 测试

ios - 如何将红色圆形减号图标作为透明背景的png?