OC -Block

block本身不是self的屬性或者變量時,在block內使用self不會造成循環(huán)引用,若是self本身的屬性或者變量時在block中使用self引用自身strong屬性將會造成retain cycle:

由于block被self持有,block又持有了self,兩者間強引用造成循環(huán)引用,無法釋放,此時可以通過 __weak typeof(self) weakSelf = self;的形式將self弱化,在block執(zhí)行完成之前weakself被釋放,self也被釋放,強引用循環(huán)被打破:

使用場景: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即可打破循環(huán)引用。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容