Блок: цикл сохранения будет происходить, потому что он содержит блок, на который ссылается блок; Если вы сделаете копию блока и используете переменную-член, self сохранится.

, этот вопрос довольно простой, но я думаю, что он актуален для многих программистов Objective-C, которые разбираются в блоках.

Я слышал, что поскольку блоки захватывают локальные переменные, на которые они ссылаются какconst копии, используяself внутри блока может привести к циклу сохранения, если этот блок будет скопирован. Итак, мы должны использовать__block заставить блок иметь дело напрямуюself вместо того, чтобы скопировать его.

__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];

вместо просто

[someObject messageWithBlock:^{ [self doSomething]; }];

Я хотел бы знать следующее: если это правда, могу ли я избежать уродства (кроме использования GC)?

Ответы на вопрос(9)

Ваш ответ на вопрос