Подтвердить что ты не робот

Являются ли Objective-C блокированы автореализованными?

Если я объявляю такой блок ^{ DoSomething; } и помещаю его в переменную экземпляра, мне нужно Block_copy(), если я собираюсь сохранить его?

4b9b3361

Ответ 1

Да, вам нужно скопировать. Не потому, что они автореализованы, а потому, что они запускаются в стеке. Обратите внимание, что блоки также ведут себя как обычные объекты Objective-C, поэтому их можно скопировать с помощью обычного сообщения copy:

void storeBlockForLater: (dispatch_block_t) block
{
    [someArray addObject:[[block copy] autorelease]];
}

Или, если у вас есть свойство block:

@property(copy) dispatch_block_t block;

Сохранение здесь не помогает.