Was ist die BOOL *stop argument für enumerateObjectsUsingBlock: verwendet für?
Habe ich mit enumerateObjectsUsingBlock:
in letzter Zeit viel für meine fast-enumeration Bedürfnisse, und ich habe eine harte Zeit zu verstehen, die Verwendung von BOOL *stop
in der Aufzählung block.
Den NSArray
Klasse Referenz-Staaten
stop
: Ein Verweis auf einen booleschen Wert. Der block kann den Wert aufYES
zu
stoppen Sie die weitere Verarbeitung des Arrays. Diestop
argument ist ein-nur
argument. Sie sollten immer nur setzen Sie diesen booleschen umYES
innerhalb der
Block.
So, dann kann ich natürlich fügen Sie Folgendes in meinem block zu stoppen, die Aufzählung:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Aus, was ich schon immer in der Lage zu sagen, nicht explizit Einstellung *stop
zu YES
hat keine negativen Nebenwirkungen. Die Aufzählung scheint automatisch stoppen, selbst am Ende des Arrays. So ist mit *stop
wirklich notwendig, in einem block?
InformationsquelleAutor Mick MacCallum | 2012-09-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
stop
argument für das Blockieren ermöglicht es Ihnen, zu stoppen, die Aufzählung vorzeitig. Es ist das äquivalentbreak
aus einer normalenfor
Schleife. Man kann es ignorieren, wenn Sie wollen, gehen Sie durch jedes Objekt im array.Ist ein out-parameter, da es eine Referenz auf eine variable aus dem aufrufenden Bereichs. Es muss festgelegt werden, in Ihrem Block, aber Lesen Sie innerhalb der
enumerateObjectsUsingBlock:
auf die gleiche WeiseNSError
s sind Häufig zurück, um Ihren code vom framework ruft.stop
flag advisory; die Aufzählung kann auch weiterhin für einige Undefinierte Anzahl von Iterationen in der gleichzeitigen Fall, zum Beispiel. I. e. Sie sollten nicht legen Sie eine__block
variable bedingungslos bei jedem Durchlauf durch die Aufzählung und erwarten, dass es das "Letzte" Wert bei Verwendung vonstop
zu früh beenden. Sie sollten immer einige der "Nein, die dieses Objekt verwenden," mit der Einstellungstop = YES;
.können Sie klären, ob die anhaltende Verhalten gilt nur gleichzeitige Aufzählung? Es ist zwar durchaus verständlich, in diesem Fall, es ist nicht belegt, und es wäre ziemlich verwunderlich, Biss in den Arsch für die "serial" - enumeration.
<rdar://problem/15015199> fordert nun eine Klärung, wie die Dokumentation sagt nicht, entweder Weg, und es sollte.
InformationsquelleAutor Josh Caswell