關(guān)于Block內(nèi)部要不要使用weakSelf的幾種情況

1.block是控制器的屬性,如果block內(nèi)部沒有使用weakSelf將會造成內(nèi)存泄露

self.testBlock = ^()
  {
      NSLog(@"%@",self.mapView);
  };
  self.testBlock();

2.當(dāng)block不是self的屬性時(shí),block內(nèi)部使用self也不會造成內(nèi)存泄露

 TestBlock testBlock = ^()
  {
      NSLog(@"%@",self.mapView);
  };
[self test:testBlock];

3.當(dāng)使用類方法有block作為參數(shù)使用時(shí),block內(nèi)部使用self也不會造成內(nèi)存泄露

[WDNetwork testBlock:^(id responsObject) {

      NSLog(@"%@",self.mapView);
  }];

只有當(dāng)block直接或間接的被self持有時(shí),才需要weak self。如果在 Block 內(nèi)需要多次 訪問 self,則需要使用 strongSelf。
準(zhǔn)確的說,應(yīng)該是假設(shè) block被放在子線程中執(zhí)行,而在執(zhí)行過程中 self 在主線程被釋放了。由于 weakSelf 是一個(gè)弱引用,因此會自動變成 nil。而在 KVO 中,會崩潰。

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容