2011-12-13 90 views
1

,我发现这样的代码在这个网站:快速列举不解

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

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

    return self; 
} 

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

+0

定义不出现做任何有用的。例如,它构建一个`retval`数组,然后甚至不返回它,而是返回`self`。 – 2011-12-13 18:06:04

+0

仅供参考,此代码似乎来自http://stackoverflow.com/a/1164072/。 – 2011-12-13 18:34:27

回答

4

一个符合NSFastEnumeration protocol任何类都可以与in语法来枚举。您发布的代码片段意味着该类还实现了由协议定义的-countByEnumeratingWithState:objects:count:方法,并且该方法返回一组NSObject实例来迭代。

0

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

您可以创建自己的自定义对象并实现该协议。然后在那个类中你就可以打电话给

for (id obj in self) { 

这将导致下面的方法被调用的类,这是在NSFastEnumeration协议

countByEnumeratingWithState:objects:count: