我可以直接通过房产进行快速枚举吗?

时间:2011-02-10 14:49:25

标签: objective-c properties for-loop enumeration

如果我有财产

@property (nonatomic, retain) NSArray* myArray;

我可以吗?如果是的话,为什么这样做呢?

for (id object in self.myArray)
    ;

或者我需要做什么?

NSArray* r = self.myArray;
for (id object in r)
    ;

3 个答案:

答案 0 :(得分:2)

它的工作原理是因为self.myArray是[self myArray]的语法糖,它由@synthesize关键字生成。所以你真的在做:

for (id object in [self myArray])

[self myArray]的返回值实现了快速枚举协议,因此for..in语法可以对它起作用。

这会让事情更清楚吗?

答案 1 :(得分:1)

是的,你可以像这样使用快速枚举。要回答您的评论中的问题,我相信如果您在枚举期间修改数组属性,快速枚举协议将抛出异常。

http://www.mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html

答案 2 :(得分:0)

你绝对可以选择for(id object in self.array)