在block中使用self的时候,需要在外部将self弱化,从而不让block持有self,避免循环引用。循环引用的原因是因为self是持有block的,如果又让block持有了self,那么就会造成循环引用。而进入block后,如果用到self,则需要将self强化,是为了避免self在block执行过程中释放。block执行玩strongSelf后会自动释放。
代码如下
__weak __typeof(self)weakSelf = self;
self.xxblock = ^{
__strong __typeof(weakSelf)strongSelf = weakSelf;
...
}
这里面用到了typeof(self),表示表明类型。如果self是UIViewController 那么--weak __typeof(self)weakSelf = self;等价于__weak UIViewController *weakSelf = self;
网友评论