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 中,會崩潰。