Я боюсь, что этот вопрос довольно простой, но я думаю, что это относится ко многим программистам Objective-C, которые попадают в блоки.
Что я слышал, так это то, что, поскольку блоки фиксируют локальные переменные, на которые ссылаются внутри них как const
копии, использование self
внутри блока может привести к циклу сохранения, если этот блок будет скопирован. Таким образом, мы должны использовать __block
, чтобы заставить блок работать непосредственно с self
вместо его копирования.
__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];
вместо
[someObject messageWithBlock:^{ [self doSomething]; }];
То, что я хотел бы знать, следующее: если это правда, есть ли способ избежать уродства (кроме использования GC)?