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