在網(wǎng)絡(luò)請求API會持有回調(diào)的block伍纫,回調(diào)的block會持有self铃绒,而self也持有網(wǎng)絡(luò)請求API的話柠偶,我們就構(gòu)造了一個循環(huán)引用次哈。雖然我們構(gòu)造出了循環(huán)引用欢伏,但是因為網(wǎng)絡(luò)請求結(jié)束時,網(wǎng)絡(luò)請求API會主動釋放對block的持有亿乳,因為整個循環(huán)鏈條被解開硝拧,循環(huán)應(yīng)用就被打破了径筏,所以不會存在內(nèi)存泄露問題。
- (void)clearCompletionBlock{
//nil out to break the retain cycle
self.successCompletionBlock = nil;
self.failureCompletionBlock = nil;
}
總之障陶,解決循環(huán)引用問題主要有兩個辦法:
- 事前避免滋恬,我們在會產(chǎn)生循環(huán)引用的地方使用weak弱引用,以避免產(chǎn)生循環(huán)引用
- 事后補救抱究,明確知道會產(chǎn)生循環(huán)引用恢氯,但是在合理的位置斷開環(huán)中的一個引用,是的對象得逸回收鼓寺。