最近私はenumerateKeysAndObjectsUsingBlock:
を使用しています。今日、仕事場の同僚の一人がこの列挙方法を別のスレッドから呼び出すことができ、コードが期待どおりに動作しない可能性があると躊躇しました。彼は私が速い列挙を使うべきだと提案する。問題は私が本当に好きなのはenumerateKeysAndObjectsUsingBlock:
であり、その性質上、早い列挙を嫌いです。enumerateKeysAndObjectsUsingBlock:同じスレッドで呼び出されることはありますか?
私の方法は、私はmyarrayのはいつも期待値(self.myDictionary
が空でないと仮定)を返します、それはいつものsomeMethodと同じスレッドで呼び出されることを確認することができます
- (NSArray *)someMethod
{
__block NSMutableArray *myArray = [NSMutableArray array];
[self.myDictionary enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[myArray addObject:obj];
}
return myArray;
}
を以下のように見えましたか?
私は方法enumerateKeysAndObjectsWithOptions:usingBlock:
があり、NSEnumerationConcurrent
オプションで呼び出すと、複数のスレッドで同時に列挙が実行されることを認識しています。
enumerateKeysAndObjectsUsingBlock
に関するドキュメントは見つかりませんでした。
アレイで使用されているものはenumerateObjectsUsingBlock:
です。
高速列挙の「性質」はあなたが確信しているこの方法をむしろ使用するほど強く嫌いですか? –
このブロック内の配列に物事を保存する順序はここで重要ですか? – Unheilig
「自然」とは、すべてのキーを呼び出して列挙し、オブジェクトにアクセスすることを意味します。ブロック列挙を使用すると、それを避けることができます。ブロック - より便利で簡単なコードで、おそらく私の最後に書いていることはありません。 – sumofighter666