enumerateObjectsUsingBlock:
Ostatnio często używam do moich potrzeb związanych z szybkim wyliczaniem i mam trudności ze zrozumieniem użycia BOOL *stop
w bloku wyliczania.
Stany NSArray
odniesienia do klasy
stop
: Odniesienie do wartości logicznej. Blok może ustawić wartość na,YES
aby zatrzymać dalsze przetwarzanie tablicy.stop
Argumentem jest argument na zewnątrz tylko. Powinieneś zawsze ustawiać tę wartość logiczną tylkoYES
w obrębie bloku.
Więc oczywiście mogę dodać następujący tekst w moim bloku, aby zatrzymać wyliczanie:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Z tego co udało mi się powiedzieć, nie jest wyraźnie ustalone *stop
, aby YES
nie mieć żadnych skutków ubocznych negatywnych. Wyliczenie wydaje się automatycznie zatrzymywać się na końcu tablicy. Czy więc używanie jest *stop
naprawdę konieczne w bloku?
stop
flaga jest zalecana; wyliczanie może być kontynuowane na przykład dla pewnej nieokreślonej liczby iteracji w przypadku równoległym. To znaczy, nie powinieneś__block
bezwarunkowo ustawiać zmiennej przy każdym przejściu przez wyliczenie i oczekiwać, że będzie to ostatnia wartość, gdy używasz jejstop
do wcześniejszego zakończenia. Zawsze powinieneś łączyć „nie, użyj tego obiektu” z ustawieniemstop = YES;
.