2011-04-10 94 views
2

美好的一天,在XCode中使用儀器進行內存泄漏檢查?

我完全沒有經驗檢查內存泄漏,所以任何幫助這將是偉大的。

我剛剛完成了我的iPhone應用程序的大部分工作,我現在試圖弄清楚爲什麼在幾次運行後停止工作。在泄漏和分配模式下使用儀器,我可以看到有一些是相當迅速堆放內存兩個對象,而不是釋放: enter image description here

我不是一個肯定百分之百哪裏或爲什麼發生這種情況,但是當我點擊

enter image description here

:上箭頭UIDeviceRGBColor的權

[UIColor allocWithZone]; 

我也通過我的項目的UIColor搜索和想出了這個(注意_colorThreshold的)的負責來電陳述

我相信我的問題已經做_colorThreshold這似乎並沒有被得到釋放:

enter image description here

我試着將自動釋放自己的初始化參數,但所做的應用程序崩潰。有什麼建議嗎?


編輯1

這裏是LevelMeter.h enter image description here屏幕截圖

+0

不是一個直接的答案,但[這個來自iDeveloper.tv的視頻](http://www.ideveloper.tv/freevideo/details?index=17012088)有一些關於objective-c中內存管理的重要指導規則,這可能會幫助你未來的項目。 – NKCSS 2011-04-10 09:47:59

回答

2

有幾個問題與上面:

  • 是LevelMeterColorThreshold的Objective-C類?
  • 如果是這樣,爲什麼你使用malloc而不是通常的alloc/init?
  • 當您粘貼搜索結果的屏幕截圖時,我們無法看到周圍的代碼,因爲只顯示帶搜索匹配的行。

泄漏儀器報告是否泄漏,或者您是否只是分配不必要的內存?
有這兩種情況之間的差異:

  1. 的泄漏發生,如果你鬆引用對象,這樣就可以不稍後發送一個release消息。
  2. 實例化對象,不再需要的不釋放/解放出來

泄漏只能檢測尚屬首例。
樣品的泄漏:

NSMutableString* test = [[NSMutableString alloc] initWithString:@"1"]; 
NSLog(@"%@", test); 
NSMutableString* anotherTest = [[NSMutableString alloc] initWithString:@"2"]; 
test = anotherTest; //here we loose reference to the original object 
NSLog(@"%@", test); 

通過分配anotherTest測試,我們已經失去了指向包含@「1」的內存地址的引用。

+0

感謝您的反饋!如果是Objective-C類(Objective-C對象允許使用結構體),我是初學者編碼器,所以不是%100。我已經發布了LevelMeter的.h文件。這是否澄清了我的問題可能是什麼?再次感謝。 – 2011-04-10 10:31:03

+0

我發現我的問題的來源。感謝您將所有內容都放在了角度! – 2011-04-10 10:41:49