Почему большинство блоков используют аргумент для продолжения итерации вместо возвращаемого значения? - PullRequest
5 голосов
/ 13 июля 2011

Для большинства итерационных блоков сигнатуры определяются как:

void(^)(id obj, BOOL* stop)

Выглядит лучше, используя возвращаемое значение для флага остановки.

BOOL(^)(id obj)

Однако я считаю, что есть веская причина, заставившая их принять решение использовать текущую форму вместо более короткой и удобной формы. Почему они используют аргумент для флага остановки?

1 Ответ

4 голосов
/ 14 июля 2011

Конечно, в любом случае это будет работать нормально, но подумайте об этом: нужно ли использовать оператор continue в конце цикла for или while? Нет, конечно, не потому, что это происходит автоматически. Если вы хотите остановить цикл, вы можете просто использовать break.

Аналогично методам перечисления на основе блоков. Вы не обязаны возвращать YES, чтобы указать, хотите ли вы продолжить перечисление или нет, потому что это произойдет автоматически. Однако, если вы хотите прекратить перечисление, вы можете просто установить *stop в YES.

...