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

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

我很快就会把它移到类方法中。但想了解该声明是如何工作的。

请帮忙。

谢谢。

4

4 回答 4

2

预处理器基本上会进行字符串替换(这可能过于简化,但对于您的示例来说还可以)。

所以每次它看到IS_4_INCH它都会用([[UIScreen mainScreen] bounds].size.height == 568)

所以例如

if(IS_4_INCH) { 

会变成

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

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

于 2013-05-08T04:37:52.983 回答
1

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

于 2013-05-08T04:36:32.340 回答
0

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

于 2013-05-08T04:36:22.323 回答
0

尽管它在您的#define IS_4_INCH 中包含IS,但在执行前面的代码和平后它并没有给出布尔值,

它的作用是:您使用IS_4_INCH的所有地方都简单地替换为([[UIScreen mainScreen] bounds].size.height == 568).

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

返回一个 BOOL

于 2013-05-08T04:36:40.173 回答