iOS- 获取工程所有控制器名称

序言

有时候我们需要获取整个工程特定类的集合.比如获取所有控制器名称,然后做埋点,归因,追踪等等,尤其是在大数据的时代,获取用户的关注,感兴趣的地方,从而精推用户喜欢的东西,只有这样才能留住用户,延长 APP 的在线使用时间,从而创造更多的价值.

直接上代码
#import <dlfcn.h>
#import <objc/runtime.h>

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    [self getAllClassName];
}

- (void)getAllClassName {
    unsigned int count;
    const char **classes;
    Dl_info info;
    
    void *_mh_execute_header = __builtin_return_address(0);
    
    //1.获取app的路径
    dladdr(_mh_execute_header, &info);
    
    //2.返回当前运行的app的所有类的名字,并传出个数
    //classes:二维数组 存放所有类的列表名称
    //count:所有的类的个数
    classes = objc_copyClassNamesForImage(info.dli_fname, &count);
    NSMutableDictionary *dict = [NSMutableDictionary dictionary];
    for (int i = 0; i < count; i++) {
        //3.遍历并打印,转换Objective-C的字符串
        NSString *className = [NSString stringWithCString:classes[i] encoding:NSUTF8StringEncoding];
        if ([className containsString:@"ViewController"]) {
            NSLog(@"class name =========== %@", className);
            [dict setObject:@" " forKey:className];
        }
        //根据类名调用
    }
    NSString * p = @"/Users/Desktop";
    NSString *ps = [p stringByAppendingPathComponent:@"news.plist"];
    [dict writeToFile:ps atomically:YES];
}
运行结果
image.png

项目下载地址

总结

技术源于分享,生活源于创造.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 每天进步一点点点点点点点点点点点点点点点点点点点点点点点点点点点点点点~~从开始只能写几句话、模仿别人的观点,到现...
    一个帅气的名字呀阅读 18,226评论 4 31
  • Love like you've never been hurt! Work like you don't ...
    Ivybear阅读 140评论 0 0
  • 318线上的垭口(组章) 1、 折多山 招展的经幡,是你的发带,一头连着汉族的山水,一头系着藏族的经文。 巍峨...
    重庆风铃阅读 823评论 2 1
  • 有月度绘画作业一幅,题目是《战记》。我一直在思考该画什么战争场面。是长坂坡还是架空世界?亦或者是对方冲进水晶的五杀...
    明鸳阅读 354评论 0 0
  • 今天发现都已经到了48讲了,距离100讲就这样过了一半时间,叶老师创建的易效能是一个知识体系,他把他所学的东西都整...
    中驿的丽丽阅读 477评论 0 0