预处理器如何定义能够为模拟器评估运行时环境的语句?

时间:2013-05-08 04:32:29

标签: ios objective-c

#define IS_4_INCH ([[UIScreen mainScreen] bounds].size.height == 568)

当我在4英寸模拟器中运行应用程序时,IS_4_INCH以上是真的。作为预处理器指令,它如何确定运行时环境。

我很快就会将其转移到类方法中。但是想要理解这种说法是如何运作的。

请帮忙。

感谢。

4 个答案:

答案 0 :(得分:2)

预处理器基本上是一个字符串替换(这可能过度简化了它,但是对于你的例子来说它可以)。

因此,每次看到IS_4_INCH时,都会将其替换为([[UIScreen mainScreen] bounds].size.height == 568)

所以例如

if(IS_4_INCH) { 

会变成

if(([[UIScreen mainScreen] bounds].size.height == 568)) {

然后编译器关闭并编译代码。编译器不知道您编写了IS_4_INCH

答案 1 :(得分:1)

预处理器定义只意味着“在编译之前用另一个字符串替换此字符串”。因此,方法调用和测试将直接插入到“IS_4_INCH”出现的代码中。然后在运行时执行方法调用和测试。

答案 2 :(得分:0)

预处理器将替换为您在编译期间在代码中定义的值。它不会在其中存储任何数据。在编译期间,“([[UIScreen mainScreen] bounds] .size.height == 568)”将替换“IS_4_INCH”。

答案 3 :(得分:0)

虽然它在#define IS_4_INCH中包含 IS ,但是在执行前面的代码安静后它没有给出一个bool,它的作用是:所有的地方您已使用 IS_4_INCH 简单地替换为([[UIScreen mainScreen] bounds].size.height == 568)

([[UIScreen mainScreen] bounds].size.height == 568)

返回BOOL