2012-06-04 100 views
1

我需要了解內存在目標C中的管理方式。我知道基本知識,如果您創建並擁有內存,則必須自行釋放內存。 然而,當它到達代碼,如:瞭解儀器和內存管理

self.storeDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath2]; 

做我自己呢?我必須釋放這個記憶嗎?

self.storeDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath2]; 
//73.3% leak 
totalCharacters = [storeDict count]; 
tagCounter = 1; 

dictKeyArray = [[storeDict allKeys] mutableCopy]; 
//13.3% leak 

當Instruments在突出顯示的泄漏旁邊放置一堆百分比時,那告訴我什麼?它是否告訴我相對於泄漏內存總量的泄漏大小?
還有最後一件事情......分配的內存數量是否持續增加是正常的?還是應該穩定在某個地方? 感謝您的幫助!一切都非常感謝!

回答

2

在大多數情況下,您只擁有名稱以「alloc」,「new」,「copy」或「mutableCopy」開頭的方法返回的對象。當然,你也擁有你發送的任何東西-retain。這些規則的例外情況應在不合格方法的文件中予以說明。

參見https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html#//apple_ref/doc/uid/20000994-SW1

儀器屬性的泄漏向創建該對象的線。但是,這不一定是泄漏對象的代碼。如果指向對象的指針被傳遞給其他代碼,並且代碼沒有平衡其保留和釋放,那麼該代碼負責泄漏。工具可以向您顯示特定對象的保留和發佈歷史,您必須查看這些歷史記錄才能瞭解哪些代碼沒有正確履行其所有權責任。另外,如果一個對象被另一個對象所擁有,並且它實際上是第二個被泄露的對象,那麼它所擁有的所有內容將會以「過渡性」的方式泄露。因此,在嘗試追蹤已泄漏的低級別對象之前,請查找泄漏的高級對象。通常情況下,泄漏的對象泄露的對象較少,這些對象是泄露對象圖的根。

無論是記憶力持續上升還是穩定是正常的,這取決於一點。通常,內存使用應該穩定。但是,如果您的應用程序真的做得越來越多,那麼它的內存使用量可能會持續增加。例如,如果應用程序正在通過網絡接收數據並在其中累積結果,則隨着更多數據到達,其內存使用率可能會增加。但如果它在某個合理的地方沒有停下來,那就是一個問題。在iOS設備上,系統最終會殺死它。

+0

謝謝!你的回答非常有幫助,我想我現在明白了! – wayway