Cocoa Core Competenciesから: 列挙:
高速列挙
コレクション クラスを含むいくつかの Cocoa クラスは、このNSFastEnumeration
プロトコルを採用しています。次の例に示すように、標準の C の for ループと同様の構文を使用して、インスタンスが保持する要素を取得するために使用します。
NSArray *anArray = // get an array;
for (id element in anArray) {
/* code that acts on the element */
}
名前が示すように、高速列挙は他の形式の列挙よりも効率的です。
ご存じない場合id
は、Objective-C 型であり、基本的に「任意の Objective-C オブジェクトへのポインター」を意味します。のポインター性id
が組み込まれていることに注意してください。あなたは通常言いたくないid *
。
anArray
の要素が特定のクラス、たとえば であると予想される場合MyObject
は、代わりにそれを使用できます。
for (MyObject *element in anArray) {
/* code that acts on the element */
}
ただし、コンパイラもランタイムも、要素が実際に のインスタンスであることを確認しませんMyObject
。の要素が のインスタンスでない場合、anArray
理解できないMyObject
メッセージを送信しようとしてしまい、セレクタが認識されない例外が発生する可能性があります。