【问题标题】:How do I lookup a string constant at runtime in Objective-C?如何在 Objective-C 运行时查找字符串常量?
【发布时间】:2014-10-09 22:57:27
【问题描述】:

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

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

【问题讨论】:

    标签: ios objective-c objective-c-runtime


    【解决方案1】:

    您可以使用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% 可靠的。在大多数情况下,它似乎工作正常,但从 3rd 方工具编译的一些应用程序似乎失败了。我假设某种形式的元数据剥离会导致这种情况?不确定。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 2011-12-13
    • 2012-05-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 1970-01-01
    • 2015-06-20
    相关资源
    最近更新 更多