如果库通过xcode丢失,则忽略代码分支



在AdWhirl SDK(一个多广告网络组合)中,框架的结构是这样的,如果你不从Google AdSense或AdMob额外导入附带的库,它在编译和运行代码时会忽略这些代码分支。也就是说,框架中有一些代码需要运行AdSense SDK,但如果你不包括AdSense,它就会忽略这些代码,不会出现编译器错误或其他任何错误。不需要用户对代码或类似内容进行注释。

我正试图建立一个具有类似要求的框架,但我一辈子都无法弄清楚他们是如何做到这一点的。显然,默认情况是,由于缺少库,在编译时代码中会出现链接器错误。如何导出具有此功能的框架(当前为.a文件)?

当您执行以下操作时:

[[ClassName alloc] init]

实际上,您要做的是将alloc消息发送到ClassName元类,然后将init发送到该元类试图返回的ClassName实例(或者,如果该元类由于缺少资源而返回nil,则不发送给任何人)。

此外,Objective-C运行时具有反射性。除其他外,这意味着您可以查询它,从类的字符串名称中查找元类。例如

Class metaclass = NSClassFromString(@"ClassName");

如果该类不存在,则返回命名元类或nil。综合起来:

id instance = [[NSClassFromString(@"ClassName") alloc] init];

如果应用程序已知该类并且有合适的资源可用,则会为您提供该类的实例。因此,在可选链接库的情况下,这是一种尝试获取类实例的方法,但如果包含该类的库没有链接,则会安全失败。

最新更新