#define IS_4_INCH ([[UIScreen mainScreen] bounds].size.height == 568)
当我在4英寸模拟器中运行应用程序时,IS_4_INCH以上是真的。作为预处理器指令,它如何确定运行时环境。
我很快就会将其转移到类方法中。但是想要理解这种说法是如何运作的。
请帮忙。
感谢。
答案 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