明らかな違い以外にも、次のような点があります。
enumerateObjectsUsingBlock
インデックスとオブジェクトの両方が必要な場合に使用します-
enumerateObjectsUsingBlock
ローカル変数を変更する必要がある場合は 使用しないでください
enumerateObjectsUsingBlock
一般的に、どちらが優れている、または劣っていると考えられますかfor (id obj in myArray)
? 利点/欠点は何ですか (たとえば、パフォーマンスは向上しますか、低下しますか)?
ベストアンサー1
最終的には、状況に応じてより自然に使用できるパターンを使用してください。
はfor(... in ...)
非常に便利で構文も簡潔ですが、enumerateObjectsUsingBlock:
興味深いかどうかわからない機能がいくつかあります。
enumerateObjectsUsingBlock:
高速列挙と同等かそれより高速になります ( は列挙を実装するために サポートfor(... in ...)
を使用しますNSFastEnumeration
)。高速列挙では、内部表現から高速列挙の表現への変換が必要です。そこにはオーバーヘッドがあります。ブロックベースの列挙により、コレクション クラスはネイティブ ストレージ形式の最速のトラバースと同じ速さでコンテンツを列挙できます。配列には関係ない可能性がありますが、辞書の場合は大きな違いになる可能性があります。「ローカル変数を変更する必要がある場合は enumerateObjectsUsingBlock を使用しないでください」 - 正しくはありません。ローカルを として宣言する
__block
と、ブロック内で書き込み可能になります。enumerateObjectsWithOptions:usingBlock:
同時列挙または逆列挙のいずれかをサポートします。辞書では、ブロックベースの列挙がキーと値を同時に取得する唯一の方法です。
個人的には、enumerateObjectsUsingBlock:
よりも を頻繁に使用しますfor (... in ...)
が、これも個人的な選択です。