美文网首页
[NSClassFromString 实例化静态库中的类]

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

作者: 咚咚嗒大人 | 来源:发表于2023-06-06 10:24 被阅读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

    相关文章

      网友评论

          本文标题:[NSClassFromString 实例化静态库中的类]

          本文链接:https://www.haomeiwen.com/subject/mecgedtx.html