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

2023-06-06  本文已影响0人  咚咚嗒大人

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

测试过程中发现当正常#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

上一篇下一篇

猜你喜欢

热点阅读