44

ここで何が起こるべきですか?安全ですか?

NSArray *nullArray=nil;
for (id obj in nullArray) {
  // blah
}

より具体的には、これを行う必要がありますか:

NSArray *array=[thing methodThatMightReturnNil];
if (array) {
  for (id obj in array) {
    // blah
  }
}

それともこれでいいですか?:

for (id obj in [thing methodThatMightReturnNil]) {
  // blah
}
4

2 に答える 2

50

- countByEnumeratingWithState:objects:count:ループの終了を知らせるために 0 を返すメソッドによって、高速な列挙が実装されます。nilどのメソッドでも戻るので0、ループは決して実行されるべきではありません。(だから安全です。)

于 2011-10-21T13:24:56.110 に答える
21

何も起こりません。for-in ループはプロトコルを使用してコレクション内の要素を反復処理するため、基本的に Objective-C で安全なNSFastEnumerationメッセージを送信しています。nil

于 2011-10-21T13:23:53.533 に答える