[解決済み] enumerateObjectsUsingBlockとforの使い分けは?
質問
明らかな違いの他に
-
使用する
enumerateObjectsUsingBlock
インデックスとオブジェクトの両方が必要な場合 -
を使用しないでください。
enumerateObjectsUsingBlock
ローカル変数を変更する必要がある場合 (これは私が間違っていました。bbumさんの回答を参照してください)
は
enumerateObjectsUsingBlock
は、一般的に良くも悪くもないと考えられています。
for (id obj in myArray)
も使えるのでしょうか?利点/欠点は何ですか(例えば、パフォーマンスが高いか低いか)?
解決方法は?
最終的には、使いたいパターンを使い、文脈の中でより自然になるようにします。
一方
for(... in ...)
は非常に便利で、構文的にも簡潔です。
enumerateObjectsUsingBlock:
には、面白いかどうかわからない機能がいくつもある。
-
enumerateObjectsUsingBlock:
は、高速な列挙と同じかそれ以上に高速になります (for(... in ...)
はNSFastEnumeration
をサポートし、列挙を実装しています)。 高速な列挙を行うためには、内部表現から高速な列挙のための表現への変換が必要です。 そこにはオーバーヘッドがある。 ブロックベースの列挙では、コレクションクラスは、ネイティブのストレージフォーマットの最速のトラバーサルと同じくらい速くコンテンツを列挙することができます。 配列の場合は関係ないかもしれませんが、辞書の場合は大きな違いになります。 -
ローカル変数を変更する必要がある場合は、enumerateObjectsUsingBlock を使用しないでください。
__block
で、ブロックの中で書き込み可能になります。 -
enumerateObjectsWithOptions:usingBlock:
は、同時列挙と逆列挙のいずれかをサポートしています。 -
辞書の場合、ブロックベースの列挙は、キーと値を同時に取得する唯一の方法である。
個人的には
enumerateObjectsUsingBlock:
よりも頻繁に
for (... in ...)
しかし、これも個人的な選択です。
関連
-
[解決済み] どのような場合に@synthesizeを明示的に使用する必要がありますか?
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] プロジェクト内の単一ファイルのARCを無効にするにはどうしたらいいですか?
-
[解決済み] ThreadLocal変数はいつ、どのように使用すればよいですか?
-
[解決済み] volatileキーワードは何に役立つのでしょうか?
-
[解決済み] Task.DelayとThread.Sleepの使い分けは?
-
[解決済み] objectForKeyとvalueForKeyの違い?
-
[解決済み】JavaでAtomicReferenceを使用するのはいつ?
-
[解決済み】Objective-Cのコードをユニットテストするのに最適な方法は何ですか?
-
[解決済み】Objective-Cのブロックをプロパティとして使用することはできますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Objective-CでNSStringsを連結するためのショートカット集
-
[解決済み] Objective-Cの#importと#includeの違いは何ですか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] newの代わりにalloc initを使用する
-
[解決済み】セマンティックな問題。プロパティの合成ゲッターは、「所有する」オブジェクトを返すためのCocoa命名規則に従っている。
-
[解決済み】メインスレッドでタスクを実行するGCD
-
[解決済み】isEqual:とハッシュをオーバーライドするためのベストプラクティス
-
[解決済み】Objective-Cでオブジェクトがどのクラスであるかをテストするにはどうすればよいですか?
-
[解決済み] [Solved] UITableViewがReloadDataを完了したことを伝えるには?
-
[解決済み】Cocoaアプリからターミナルコマンドを実行する