繁体   English   中英

Objective-C 中的#statements

[英]#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 有一个编译器环境变量。 如果该变量存在,则编译前两行代码。 如果没有,后两个可以。

更多信息在这里: http://en.wikipedia.org/wiki/C_preprocessor

这些是 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM