[NSClassFromString 实例化静态库中的类]

开发过程中想使用反射的机制,加载静态库中的类

测试过程中发现当正常#import并直接初始化时,再用反射加载对象,是可以获取到类对象的。
#import "StaticLibyClassNameXXXXXXSDK.h"
StaticLibyClassName * xxxx = [[StaticLibyClassName alloc]init];

当有上面两步操作后myClass值不为空

Class myClass = NSClassFromString("StaticLibyClassName");
image.png

但是如果直接没有创建过对象,而是直接使用反射的机制创建一个类对象,就会得到一个空对象。

image.png

解决办法:

StaticLibyClassName是从静态库中实例化一个Class,需要在bulid settings中的Other Linker Flags中添加"-ObjC"标识。否则 myClass 为nil.

image.png
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

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

推荐阅读更多精彩内容