iOS開(kāi)發(fā)中匆赃,經(jīng)常會(huì)遇到內(nèi)存泄漏的問(wèn)題淤毛,定位錯(cuò)誤代碼是很多人頭疼的問(wèn)題。你是否經(jīng)歷過(guò)算柳,用了半天時(shí)間去解決一個(gè)內(nèi)存泄露問(wèn)題低淡?
大多數(shù)情況下,我們通過(guò)在dealloc方法打斷點(diǎn)瞬项,或用MLeaks等方法蔗蹋,比較容易地判斷某個(gè)視圖控制器,或某個(gè)View不能釋放囱淋。卻沒(méi)有好的方法定位這個(gè)類(lèi)中的問(wèn)題代碼猪杭。
下面,我教你如何使用Xcode用2分鐘找到問(wèn)題绎橘。
不知道大家有沒(méi)有注意到Xcode Debug區(qū)有一個(gè)按鈕胁孙,叫 "Debug Memory Graph" , 下面的內(nèi)容就圍繞這個(gè)功能展開(kāi)唠倦。
image
我寫(xiě)了一個(gè)頁(yè)面TestViewController,代碼如下涮较,
@implementation TestViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
[[TestManager manager] setTestBlock:^{
[self testAction];
}];
}
- (void)testAction {}
@end
@implementation TestManager
- (void)setTestBlock:(void(^)(void))block {
_testBlock = [block copy];
}
@end
下面我們運(yùn)行項(xiàng)目稠鼻,進(jìn)入TestViewController,然后退出頁(yè)面狂票,點(diǎn)擊Debug Memory Graph 按鈕候齿,稍等片刻,可以在左側(cè)看到當(dāng)前內(nèi)存中所有的對(duì)象闺属,下方輸入框可以已篩選
image
點(diǎn)擊選中TestViewController的實(shí)例慌盯,可以看到這個(gè)對(duì)象被TestManager 的_testBlock持有
image
然后我們查看對(duì)_testBlock賦值的代碼,就可以輕松定位問(wèn)題啦
image
image
OVER