Rob*_*Rob 2 for-loop objective-c fast-enumeration
如果这个问题非常简单,我很抱歉,但我已经用Google搜索过疯狂,无法找到合适的解释.
for (id line in self.lines){
[linesCopy addObject:[line copyWithZone:zone]];
}
Run Code Online (Sandbox Code Playgroud)
我只是在学习Objective-C,这是一种for我以前从未见过的循环形式.我对这个简单很熟悉
for (int x = 1, x < 10, x++)
Run Code Online (Sandbox Code Playgroud)
for循环的风格.
rob*_*off 11
来自可可核心能力:枚举:
快速枚举
几个Cocoa类,包括集合类,采用该
NSFastEnumeration协议.您可以使用它来使用类似于标准C for循环的语法来检索实例持有的元素,如以下示例所示:Run Code Online (Sandbox Code Playgroud)NSArray *anArray = // get an array; for (id element in anArray) { /* code that acts on the element */ }顾名思义,快速枚举比其他形式的枚举更有效.
如果您不知道,id是Objective-C类型,基本上意味着"指向任何Objective-C对象的指针".请注意,指针id内置于其中; 你通常不会想说id *.
如果您希望元素anArray属于特定类,比如说MyObject,您可以使用它:
for (MyObject *element in anArray) {
/* code that acts on the element */
}
Run Code Online (Sandbox Code Playgroud)
但是,编译器和运行时都不会检查元素是否确实是实例MyObject.如果一个元素anArray是没有的一个实例MyObject,你可能最终会试图发送一个消息,它不理解,并得到一个选择-不承认例外.