,如果我有一个属性我可以直接通过属性进行快速枚举吗?
@property (nonatomic, retain) NSArray* myArray;
我能做什么?如果是的话,为什么这个工作?
for (id object in self.myArray)
;
或者我需要做什么?
NSArray* r = self.myArray;
for (id object in r)
;
,如果我有一个属性我可以直接通过属性进行快速枚举吗?
@property (nonatomic, retain) NSArray* myArray;
我能做什么?如果是的话,为什么这个工作?
for (id object in self.myArray)
;
或者我需要做什么?
NSArray* r = self.myArray;
for (id object in r)
;
它的工作原理是因为self.myArray为[自myArray的],其由@synthesize关键字生成语法糖。所以,真的是你正在做的:
for (id object in [self myArray])
而[自myArray的]的返回值实现快速列举协议使的for..in语法上进行工作。
这是否使事情更清晰?
你绝对可以去for(id object in self.array)
是的,你可以使用快速列举这样。要回答您的评论中的问题,我相信如果您在枚举过程中修改数组属性,快速枚举协议将引发异常。
http://www.mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html
你试过了吗?你可以在20秒左右找到答案。 – 2011-02-10 15:05:49
其实我更感兴趣的是它的工作原理。它是一个编译器优化?现在循环如何,self.myArray总是一样的? – CodeFlakes 2011-02-10 15:19:41