參考:http://www.reibang.com/p/c6ca540861d9
我們知道當(dāng)對(duì)block使用不當(dāng)時(shí)會(huì)造成循環(huán)引用導(dǎo)致內(nèi)存泄露悟衩,這里列出幾種使用block到底會(huì)不會(huì)引起循環(huán)引用的例子多望,通過重寫控制器dealloc规哲,當(dāng)控制器被pop看有沒有調(diào)用來判斷按价。
block是控制器的屬性赚爵,如果block內(nèi)部沒有使用weakSelf將會(huì)造成內(nèi)存泄露
self.testBlock = ^() { NSLog(@"%@",self.mapView); }; self.testBlock();
把block內(nèi)部抽出一個(gè)作為self的方法瓢湃,當(dāng)使用weakSelf調(diào)用這個(gè)方法矢炼,并且這個(gè)方法里有self的屬性斤葱,block不會(huì)造成內(nèi)存泄露
self.testBlock = ^() { [weakSelf test]; };-(void)test{ NSLog(@"%@",self.mapView);}
當(dāng)block不是self的屬性時(shí)慷垮,block內(nèi)部使用self也不會(huì)造成內(nèi)存泄露TestBlock testBlock = ^() { NSLog(@"%@",self.mapView); };[self test:testBlock];
當(dāng)使用類方法有block作為參數(shù)使用時(shí),block內(nèi)部使用self也不會(huì)造成內(nèi)存泄露
[WDNetwork testBlock:^(id responsObject) { NSLog(@"%@",self.mapView); }];
以上幾個(gè)是我通過控制器pop時(shí)揍堕,通過有沒有走dealloc方法測出來的料身。
文/iOSWoden(簡書作者)原文鏈接:http://www.reibang.com/p/c6ca540861d9著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)衩茸,并標(biāo)注“簡書作者”芹血。