开发过程中想使用反射的机制,加载静态库中的类
测试过程中发现当正常#import并直接初始化时,再用反射加载对象,是可以获取到类对象的。
#import "StaticLibyClassNameXXXXXXSDK.h"
StaticLibyClassName * xxxx = [[StaticLibyClassName alloc]init];
当有上面两步操作后myClass值不为空
Class myClass = NSClassFromString("StaticLibyClassName");
但是如果直接没有创建过对象,而是直接使用反射的机制创建一个类对象,就会得到一个空对象。
解决办法:
StaticLibyClassName是从静态库中实例化一个Class,需要在bulid settings中的Other Linker Flags中添加"-ObjC"标识。否则 myClass 为nil.
Flags | 位置 | 作用 |
---|---|---|
-ObjC | Other Linker Flags | 链接静态库中所有的Objective-C代码到APP |
-all_load | Other Linker Flags | 全加载,链接静态库中所有的代码到APP,无论是c、c++还是oc |
-force_load | Other Linker Flags | 链接指定静态库中所有的代码到APP,无论是c、c++还是oc |
补充说明:
对于制作的静态库包含分类的,制作的工程中,可以不用设置-ObjC,但是使用时,必须要添加-ObjC
对于制作动态库包含分类的,制作的工程添加-ObjC,使用的工程可以不添加-ObjC
附赠参考文档:
https://www.cnblogs.com/zhidao-chen/p/3259786.html
https://www.jianshu.com/p/360c804f4a6e