[英]#statements in Objective-C
我遇到了以下代码,想知道#statement 的含义以及是否有任何好地方可以学习如何使用该语法:
#if __IPHONE_3_0
cell.textLabel.text = [photoTitles objectAtIndex:indexPath.row];
cell.textLabel.font = [UIFont systemFontOfSize:13.0];
#else
cell.text = [photoTitles objectAtIndex:indexPath.row];
cell.font = [UIFont systemFontOfSize:13.0];
#endif
这不是 Objective-C,它是“C 预处理器”,它基本上是一个专门的文本解析系统,在实际编译之前在项目中的每个源文件上运行。 它与处理#import
指令的系统相同。
将其视为为您的代码提供“元”编译。 在这种情况下,iPhone 3.0 有一个编译器环境变量。 如果该变量存在,则编译前两行代码。 如果没有,后两个可以。
这些是 C 预处理器指令。 它们允许您在编译源代码之前根据编译器选项更改程序的源代码。
在您的示例中,如果正在为iOS 3.0(或更高版本)编译代码,则编译第一个代码块(在#if
和#else
之间)。 否则,使用第二个代码块。
请注意,这发生在编译时,而不是运行时。 因此,上述技术对于在多个项目中使用的代码更有用。
如果您搜索有关“预处理器指令”的信息,您应该会找到更多信息。
这些是编译器指令,特别是条件。 它们会导致您的代码根据编译时的环境进行不同的编译。
有关条件和其他编译器指令的更多信息,请查看有关 C 预处理器中的条件的此页面,这对于 C 和 Objective-C 的工作方式类似。
请记住,这些仅在编译时起作用。 如果您在 iPhone 3.0 配置中编译此代码,则程序在运行时不会感觉到您是在 iPhone 4 上运行它。您必须重新配置源代码以便不定义__IPHONE_3_0
,然后编译程序再次。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.