Если я объявляю такой блок ^{ DoSomething; }
и помещаю его в переменную экземпляра, мне нужно Block_copy()
, если я собираюсь сохранить его?
Являются ли Objective-C блокированы автореализованными?
Ответ 1
Да, вам нужно скопировать. Не потому, что они автореализованы, а потому, что они запускаются в стеке. Обратите внимание, что блоки также ведут себя как обычные объекты Objective-C, поэтому их можно скопировать с помощью обычного сообщения copy
:
void storeBlockForLater: (dispatch_block_t) block
{
[someArray addObject:[[block copy] autorelease]];
}
Или, если у вас есть свойство block:
@property(copy) dispatch_block_t block;
Сохранение здесь не помогает.