最佳答案
恐怕这个问题非常基本,但我认为它与许多正在进入块的 Objective-C 程序员有关。
我所听到的是,由于块捕获它们中作为 const
副本引用的本地变量,因此在块中使用 self
可能导致保留循环,如果该块被复制的话。因此,我们应该使用 __block
来强制块直接处理 self
,而不是复制它。
__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];
而不是仅仅
[someObject messageWithBlock:^{ [self doSomething]; }];
我想知道的是: 如果这是真的,有没有办法可以避免丑陋(除了使用 GC) ?