私は財産プロパティを使用して直接列挙を行うことはできますか?
@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は@synthesizeキーワードによって生成された[自己MyArrayという]、のための構文糖であるので、それは動作します。
for (id object in [self myArray])
をそしてこのfor..in構文はそれに取り組むことができるように[自己MyArrayという]の戻り値は、高速列挙プロトコルを実装していますので、本当にあなたがやっています。
これは物事をより明確にしますか?
標準の読み取り/書き込み可能なプロパティには、@synthesize:myArrayとsetMyArrayによって生成される2つの関数があることを追加します。また、この情報はhttp://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocProperties.htmlにあります。 – Cthutu
あなたは間違いなくはい、あなたがそのように高速列挙体を使用することができますfor(id object in self.array)
のために行くことができます。あなたのコメントからの質問に答えるために、列挙中に配列プロパティを変更すると、高速列挙プロトコルが例外をスローすると思います。
http://www.mikeash.com/pyblog/friday-qa-2010-04-16-implementing-fast-enumeration.html
試しましたか?答えは約20秒で見つかりました。 –
実際に私はそれがなぜ機能するかにもっと興味があります。それはコンパイラの最適化ですか?どのようにしてself.myArrayは常に同じループになりますか? – CodeFlakes