我遇到了以下代码,我想知道#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
答案 0 :(得分:4)
这不是Objective-C,它是“C预处理器”,它基本上是一个专门的文本解析系统,它在项目实际编译之前在项目的每个源文件上运行。它与处理#import
指令的系统相同。
将其视为为您的代码提供“元”编译。在这种情况下,iPhone 3.0有一个编译环境变量。如果存在该变量,则编译前两行代码。如果没有,那么后两个会这样做。
答案 1 :(得分:2)
这些是C预处理程序指令。它们允许您在编译源代码之前根据编译器选项更改程序的源代码。
在您的示例中,如果代码正在为 iOS 3.0(或更高版本)编译,则会编译第一个代码块(#if
和#else
之间)。否则,使用第二个代码块。
请注意,这发生在编译时间,而不是运行时间。因此,上述技术对于在多个项目中使用的代码更有用。
如果您搜索“预处理程序指令”的信息,您应该找到更多信息。
答案 2 :(得分:1)
这些是编译器指令,特别是条件。它们会导致代码的编译方式不同,具体取决于编译时的环境。
有关条件和其他编译器指令的更多信息,请查看this page on conditionals in the C Preprocessor,它对C和Objective-C的工作方式类似。
请记住,这些只在编译时发挥作用。如果您在其iPhone 3.0配置中编译此代码,程序将无法在运行时检测到您在iPhone 4上运行它。您将不得不重新配置源代码,以便未定义__IPHONE_3_0
,并且然后再次编译程序。