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