OC -Block

block本身不是self的属性或者变量时,在block内使用self不会造成循环引用,若是self本身的属性或者变量时在block中使用self引用自身strong属性将会造成retain cycle:

由于block被self持有,block又持有了self,两者间强引用造成循环引用,无法释放,此时可以通过 __weak typeof(self) weakSelf = self;的形式将self弱化,在block执行完成之前weakself被释放,self也被释放,强引用循环被打破:

使用场景:packetTunnelProvider中:

__weak typeof(self) weakSelf = self;

[self setTunnelNetworkSettings:networkSettings completionHandler:^(NSError * _Nullable error) {

if (error) {

completionHandler(error);

}else{

weakSelf.proxyServer = [Helper getHttpProxyServerWithPort:weakSelf.proxyPort];

NSError *error = nil;

[weakSelf.proxyServer startAndReturnError:&error];

}

}];


setTunnelNetworkSettings闭包为self所持有的闭包,.proxyServer等为当前类所持有的属性,通过weakself即可打破循环引用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容