enumerateObjectsUsingBlock:Ostatnio często używam do moich potrzeb związanych z szybkim wyliczaniem i mam trudności ze zrozumieniem użycia BOOL *stopw bloku wyliczania.
Stany NSArrayodniesienia do klasy
stop: Odniesienie do wartości logicznej. Blok może ustawić wartość na,YESaby zatrzymać dalsze przetwarzanie tablicy.stopArgumentem jest argument na zewnątrz tylko. Powinieneś zawsze ustawiać tę wartość logiczną tylkoYESw 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 YESnie mieć żadnych skutków ubocznych negatywnych. Wyliczenie wydaje się automatycznie zatrzymywać się na końcu tablicy. Czy więc używanie jest *stopnaprawdę konieczne w bloku?
stopflaga 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ś__blockbezwarunkowo ustawiać zmiennej przy każdym przejściu przez wyliczenie i oczekiwać, że będzie to ostatnia wartość, gdy używasz jejstopdo wcześniejszego zakończenia. Zawsze powinieneś łączyć „nie, użyj tego obiektu” z ustawieniemstop = YES;.