В последнее время я много использую enumerateObjectsUsingBlock:для своих потребностей в быстром перечислении, и мне трудно понять использование BOOL *stopв блоке перечисления.
В NSArrayссылке на класс говорится
stop: Ссылка на логическое значение. Блок может установить значение,YESчтобы остановить дальнейшую обработку массива.stopАргумент является из-единственного аргумента. Вы должны устанавливать это логическое значение только вYESпределах блока.
Итак, конечно, я могу добавить в свой блок следующее, чтобы остановить перечисление:
if (idx == [myArray indexOfObject:[myArray lastObject]]) {
*stop = YES;
}
Из того, что я был в состоянии сказать, явно не установка *stopна YESне имеет каких - либо негативных побочных эффектов. Похоже, что перечисление автоматически останавливается в конце массива. Так *stopдействительно ли необходимо использовать в блоке?
stopфлаг носит рекомендательный характер; Перечисление может продолжаться, например, в течение некоторого неопределенного количества итераций в параллельном случае. Т.е. вы не должны__blockбезоговорочно устанавливать переменную при каждом проходе по перечислению и ожидать, что она будет «последним» значением при использованииstopдля раннего завершения. Вы всегда должны связывать «нет, используйте этот объект» с настройкойstop = YES;.