私は最近、高速列挙のニーズで多くのenumerateObjectsUsingBlock:
を使用していましたが、列挙ブロックのBOOL *stop
の使用法を理解するのは苦労しています。enumerateObjectsUsingBlockのBOOL * stop引数は何ですか?
NSArray
クラス基準状態
stop
:ブール値を参照します。ブロックは、値をYES
〜 に設定して、アレイの処理を停止することができます。stop
引数はout-only 引数です。 ブロック内でこのブール値をYES
に設定する必要があります。if (idx == [myArray indexOfObject:[myArray lastObject]]) { *stop = YES; }
私は明示的に持っていない
YES
から*stop
を設定していない、言うことができました何から:
は、それではもちろん私は、列挙を停止するには、私のブロックに以下を追加することができますいかなる副作用もありません。列挙は、配列の終わりに自動的に停止するようです。だからブロック内で実際には*stop
を使用していますか?
「stop」フラグはアドバイザリであることに注意してください。例えば、並行した場合には、いくつかの未定義の反復回数について列挙を継続することができる。私。列挙を通過するたびに '__block'変数を無条件に設定して、' stop'を使って早期に終了するときには 'last '値にすることを期待してはいけません。 "いいえ、このオブジェクトを使用する"と 'stop = YES; 'を設定することで常に結合する必要があります。 – bbum
@bbum、継続的な動作が並行列挙に_only_を適用するかどうかを明確にすることはできますか?その場合は完全に理解できますが、それは文書化されておらず、「シリアル」列挙のためのかなりの驚きの一口でしょう。 –