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