,如果我有一個屬性我可以直接通過屬性進行快速枚舉嗎?
@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