#define IS_4_INCH ([[UIScreen mainScreen] bounds].size.height == 568)
当我在 4 英寸模拟器中运行应用程序时,IS_4_INCH 以上为真。作为预处理器指令,它如何确定运行时环境。
我很快就会把它移到类方法中。但想了解该声明是如何工作的。
请帮忙。
谢谢。
#define IS_4_INCH ([[UIScreen mainScreen] bounds].size.height == 568)
当我在 4 英寸模拟器中运行应用程序时,IS_4_INCH 以上为真。作为预处理器指令,它如何确定运行时环境。
我很快就会把它移到类方法中。但想了解该声明是如何工作的。
请帮忙。
谢谢。
预处理器基本上会进行字符串替换(这可能过于简化,但对于您的示例来说还可以)。
所以每次它看到IS_4_INCH
它都会用([[UIScreen mainScreen] bounds].size.height == 568)
所以例如
if(IS_4_INCH) {
会变成
if(([[UIScreen mainScreen] bounds].size.height == 568)) {
然后编译器关闭并编译代码。编译器不知道你写了IS_4_INCH
.
预处理器定义只是意味着“在编译之前用这个另一个字符串替换这个字符串”。因此,方法调用和测试直接插入到出现“IS_4_INCH”的代码中。然后在运行时执行方法调用和测试。
预处理器将替换为您在编译期间在代码中定义的值。它不会在其中存储任何数据。这里的“IS_4_INCH”将在编译过程中替换为“([[UIScreen mainScreen] bounds].size.height == 568)”。
尽管它在您的#define IS_4_INCH 中包含IS,但在执行前面的代码和平后它并没有给出布尔值,
它的作用是:您使用IS_4_INCH的所有地方都简单地替换为([[UIScreen mainScreen] bounds].size.height == 568)
.
([[UIScreen mainScreen] bounds].size.height == 568)
返回一个 BOOL