enumerateObjectsUsingBlock と for のどちらを使うべきか 質問する

enumerateObjectsUsingBlock と for のどちらを使うべきか 質問する

明らかな違い以外にも、次のような点があります。

  • enumerateObjectsUsingBlockインデックスとオブジェクトの両方が必要な場合に使用します
  • enumerateObjectsUsingBlock ローカル変数を変更する必要がある場合は 使用しないでください (これについては間違っていました。bbumの回答を参照してください)

enumerateObjectsUsingBlock一般的に、どちらが優れている、または劣っていると考えられますかfor (id obj in myArray)? 利点/欠点は何ですか (たとえば、パフォーマンスは向上しますか、低下しますか)?

ベストアンサー1

最終的には、状況に応じてより自然に使用できるパターンを使用してください。

for(... in ...)非常に便利で構文も簡潔ですが、enumerateObjectsUsingBlock:興味深いかどうかわからない機能がいくつかあります。

  • enumerateObjectsUsingBlock:高速列挙と同等かそれより高速になります ( は列挙を実装するために サポートfor(... in ...)を使用しますNSFastEnumeration)。高速列挙では、内部表現から高速列挙の表現への変換が必要です。そこにはオーバーヘッドがあります。ブロックベースの列挙により、コレクション クラスはネイティブ ストレージ形式の最速のトラバースと同じ速さでコンテンツを列挙できます。配列には関係ない可能性がありますが、辞書の場合は大きな違いになる可能性があります。

  • 「ローカル変数を変更する必要がある場合は enumerateObjectsUsingBlock を使用しないでください」 - 正しくはありません。ローカルを として宣言する__blockと、ブロック内で書き込み可能になります。

  • enumerateObjectsWithOptions:usingBlock:同時列挙または逆列挙のいずれかをサポートします。

  • 辞書では、ブロックベースの列挙がキーと値を同時に取得する唯一の方法です。

個人的には、enumerateObjectsUsingBlock:よりも を頻繁に使用しますfor (... in ...)が、これも個人的な選択です。

おすすめ記事