Блоки — это реализация Objective-C замыканий (closures) — самодостаточные единицы кода, которые можно передавать и выполнять позже, похожие на функции, но определяемые inline.
returnType (^blockName)(parameterTypes) = ^(parameters) {
// код
};
По умолчанию блоки захватывают переменные как константы (их значение на момент захвата). Чтобы блок мог модифицировать захваченную переменную, её нужно объявить с модификатором __block:
__block int counter = 0;
void (^increment)(void) = ^{ counter++; };
sortedArrayUsingComparator:enumerateObjectsUsingBlock:Управление памятью — это ключевой вопрос: блоки могут создавать циклические ссылки (retain cycles), когда они сильно захватывают self внутри класса. Обычно это решается через слабую ссылку:
__weak typeof(self) weakSelf = self;
void (^myBlock)(void) = ^{
[weakSelf doSomething];
};
Блоки в Objective-C захватывают переменные из окружающей области видимости как изменяемые ссылки по умолчанию, позволяя блоку модифицировать исходную переменную без каких-либо специальных модификаторов.
Новый — ещё не проверен сообществом
Вы