2015-06-27 47 views
0

大家好! 我現在使用Xcode 6.2開發Objective-C,當我嘗試使用「工具」來檢測內存問題時,它只是不工作,因爲我看書或blogs.I使用代碼打擊來測試(主要功能是省略,使用默認的xcode &樂器設置)。Xcode 6.2儀器內存泄漏檢測問題

for(int i=0; i<2; i++) 
{ 
    KSTestObj *obj0 = [[KSTestObj alloc] init]; 
    KSTestObj *obj1 = [[KSTestObj alloc] init]; 
    obj0.obj = obj1; 
    obj1.obj = obj0; 
} 
sleep(100); 

和KSTestObj類只是有一個NSObject屬性。 這是一個奇怪的現象。 當我設置我< 1,「儀器」捕獲任何東西,當我(或更大),它可以檢測到泄漏的內存問題!但泄露的對象數是2(或2 *倍-2)!這就是奇!任何人都知道發生了什麼?我犯了什麼錯誤嗎? TKS! 這裏是圖片&日誌: i < 2,和「儀器」檢測到2個對象泄漏。

2015-06-27 14:33:19.108 ObjCPro_Test[50820:603] init success! 0x7ff968700c10 
2015-06-27 14:33:19.109 ObjCPro_Test[50820:603] init success! 0x7ff968700c20 
2015-06-27 14:33:19.109 ObjCPro_Test[50820:603] init success! 0x7ff9687003a0 
2015-06-27 14:33:19.110 ObjCPro_Test[50820:603] init success! 0x7ff9687003b0 
<End of Run> 

enter image description here

我< 1, 「儀器」 顯示無泄漏的對象!

2015-06-27 14:30:17.737 ObjCPro_Test[50789:603] init success! 0x7f7ff1e00830 
2015-06-27 14:30:17.738 ObjCPro_Test[50789:603] init success! 0x7f7ff1e004e0 
<End of Run> 

enter image description here

回答

0

如果obj0含有的強引用OBJ1,並OBJ1還含有強引用obj0,你已經創建了一個保留週期,其中沒有一個對象可以被釋放。

這將泄漏每個對象的內存,通過循環進行每次迭代。 (這就是爲什麼它的迭代次數是2次-1)。

要解決這個問題,可以將obj屬性設置爲弱,以便在迭代結束時每個對象都可以不存在。