2012-08-14 11 views
0

我正在嘗試記憶測試我的應用程序。追蹤分配測試結果 - 看起來不錯或不太好?

我跟着主辦單位 - 文檔一篇題爲「恢復記憶你已經拋棄了」,但我不知道,如果結果讓我的測試頁面好或壞,或介於兩者之間。

(涉及我的測試:導航到第2頁,回到第1頁,按「馬克堆」 -repeated 25倍的好辦法。)

附件是我分配測試的截圖。大部分#Persistent值都是0.但是有一些異常。這些是典型的嗎?

(最後Heapshot,26歲,被停止記錄後取,並按下「馬克堆」在跟蹤結束 - 如文檔中建議。)

我將是一些非常感激諮詢。謝謝。

enter image description here

回答

2

我相信,你正在使用ARC,如果你正在使用ARC,也沒有必要的困擾有關堆,它會照顧一切。

這裏有9個簡單點from Apple's docs要記住在使用ARC:

ARC規定使用其他 編譯器模式時不出現一些新的規則。這些規則旨在提供完全可靠的內存管理模型;在某些情況下,他們只是執行最好的練習,在其他一些情況下,他們簡化了您的代碼,或者明顯是您不必處理內存管理的推論。如果您違反了這些規則,您會立即發現編譯時錯誤,而不是在運行時可能會出現的微妙錯誤。

  1. 你不能顯式調用的dealloc,或實施或調用保留, 釋放,retainCount,或自動釋放。 禁止擴展到使用@選擇器(保留),@選擇器(發佈)等。

  2. 如果您需要管理除釋放實例變量之外的資源,則可以實施dealloc方法。您不必 (實際上您不能)釋放實例變量,但您可能需要在系統類中調用[systemClassInstance setDelegate:nil] 其他未使用ARC編譯的代碼。 ARC中的自定義dealloc方法不需要調用[super dealloc](它實際上導致編譯器錯誤)。鏈接到 super的 被編譯器自動執行並強制執行。

  3. 您仍然可以使用CFRetain,CFRelease,以及其他相關功能 與Core Foundation的風格

  4. 不能使用NSAllocateObject或NSDeallocateObject。

  5. 使用alloc創建對象;運行時會處理取消分配對象的 。

  6. 你不能在C結構中使用對象指針。 您可以創建一個Objective-C類來管理數據,而不是使用結構。 id和void *之間沒有隨意的轉換。

  7. 您必須使用能夠告訴編譯器關於對象生命週期的特殊轉換。您需要執行此操作以在作爲函數參數傳遞的Objective-C對象和 Core Foundation類型之間進行投射。有關更多 的詳細信息,請參閱「管理免費電話橋接」。

  8. 您不能使用NSAutoreleasePool對象。 ARC提供了@autoreleasepool塊。這些優勢比NSAutoreleasePool更高效。

  9. 您不能使用內存區域。 無需再使用NSZone - 無論如何它們被現代Objective-C運行時忽略。

+0

謝謝sree。此外,萬一它有助於任何人。我使用已建立的購買應用程序進行了相同的測試,結果非常相似。這是令人放心的。 :) – 2012-08-15 11:28:08

+2

「我相信你正在使用ARC,如果你使用的是ARC,不需要煩惱堆,它會處理所有事情。」不,ARC不會照顧你的一切:http://stackoverflow.com/questions/6260256/what-kind-of-leaks-does-automatic-reference-counting-in-objective-c-not-prevent和有許多情況下,查看堆鏡頭仍然可以指出內存堆積。我所有的應用程序都支持ARC,但我仍然非常依賴堆找到保留週期,泄漏CF對象等。 – 2012-08-22 18:52:36