如何在Objective-C中在运行时查找字符串常量?

6

我的公司开发了一个广告SDK,它调解其他广告网络。在运行时,它通过使用NSClassFromString检查其他广告网络是否存在,并在它们存在时发送这些类的消息。

这对于Objective-C对象来说很好用,但是如何在运行时加载字符串常量呢?在这种情况下,我想检查一个只能通过字符串常量(extern NSString* VungleSDKVersion;)获得的SDK版本。

1个回答

10
您可以使用CFBundleGetDataPointerForName在运行时查找常量的值。
NSString *lookupStringConstant(NSString *constantName) {
    void ** dataPtr = CFBundleGetDataPointerForName(CFBundleGetMainBundle(), (__bridge CFStringRef)constantName);
    return (__bridge NSString *)(dataPtr ? *dataPtr : nil);
}

使用示例:

NSString *version = lookupStringConstant(@"VungleSDKVersion");
NSLog(@"Version = %@",version);

这是事实多年后的事情了,但我想补充一下当时它并不是100%可靠的。在大多数情况下似乎运行良好,但从第三方工具编译的某些应用程序似乎会失败。我猜测是某种元数据剥离导致的?不确定。 - MaxGabriel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接