快速枚举不理解

时间:2011-12-13 17:57:35

标签: iphone objective-c ios xcode

我在这个网站上找到了这样的代码:

 - (NSArray *) valueForKey:(id)key {
  NSMutableArray *retval = [NSMutableArray array];

  for (NSObject *object in self) {
    [retval addObject:[object valueForKey:key]];
  }

  return self;
}

很抱歉新手问题,但我无法弄清楚那里的快速枚举是什么,因为自我只是一个对象,而不是一个集合。

3 个答案:

答案 0 :(得分:4)

任何符合NSFastEnumeration protocol的类都可以使用in语法进行枚举。您发布的代码片段暗示该类还实现了协议定义的-countByEnumeratingWithState:objects:count:方法,并且该方法返回一个NSObject实例数组以进行迭代。

答案 1 :(得分:2)

它是for ( ... in ... )循环。

NSMutableArray必须符合NSFastEnumeration协议。

请参阅:http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/Chapters/ocFastEnumeration.html

答案 2 :(得分:0)

如果您的示例有效,则表示self是实现NSFastEnumeration的类的实例。这是需要采用的协议,以便快速枚举。

例如,您可以创建自己的自定义对象并实现该协议。然后在那个班级里你可以打电话给

for (id obj in self) {

这将导致在您的类上调用以下方法,该方法在NSFastEnumeration协议中定义

countByEnumeratingWithState:objects:count: