通过检查像SKStoreProductParameterAffiliateToken这样的常量的地址来完成什么



我从我正在使用的库中获得了这段代码。

#ifdef __IPHONE_8_0
    if (&SKStoreProductParameterAffiliateToken) {
        if (self.affiliateToken) {
            [appParameters setObject:self.affiliateToken forKey:SKStoreProductParameterAffiliateToken];
            if (self.campaignToken) {
                [appParameters setObject:self.campaignToken forKey:SKStoreProductParameterCampaignToken];
            }
        }
    }
#endif

Xcode 说第一行总是评估为真,但这行到底在做什么?我从未见过if以这种方式&和常数。

SKStoreProductParameterAffiliateToken定义为

SK_EXTERN NSString * const SKStoreProductParameterAffiliateToken NS_AVAILABLE_IOS(8_0);

开发人员试图检查什么,常量的地址?他是否试图检查iOS版本是否定义了这个常量,并且通过这样做,他试图检查是否应该运行中的指令?但是他已经有了ifdef __IPHONE_8_0...(??!!)

我不明白。

无论如何,我正在为iOS 9.3进行编译,因此我可以删除ififdef,对吗?

这是检查弱链接符号是否可用。如果包含该符号的库/框架已弱链接且不可用,则其地址的计算结果将为NULL,并且if条件将为假。

有关完整详细信息,请参阅 Apple 使用基于 SDK 的开发中的使用弱链接的方法、函数和符号

#ifdef __IPHONE_8_0检查Xcode是否应该在里面编译代码。Ohterwise 旧版本的 Xcode 将显示有关未知变量SKStoreProductParameterAffiliateToken的错误。

但是当使用较新的 Xcode 版本(使用 iOS SDK 8+(时,我们仍然可以为我们的项目设置较低的最低目标。在这种情况下,为了避免在低于iOS 8版本的设备上崩溃,我们应该首先检查是否存在变量,类,方法或函数。

在您的情况下,我们正在检查指向SKStoreProductParameterAffiliateToken的指针是否未NULL,这意味着应用程序当前至少在iOS 8上运行。

相关内容

  • 没有找到相关文章

最新更新