2010-12-11 160 views
1

我知道有些內存泄​​漏沒有什麼大不了,或者不在開發人員的控制範圍之內,因爲它們在sdk本身,但我看到的是iOS 4上的iOS版本爲32KB SDK 4.2。我還沒有能夠在3GS上觸發此功能。它發生在響應用戶交互(響應打開照片庫,並且泄漏似乎在我進入照片庫時發生),因此它可以快速建立起來。iPhone內存泄漏

這裏的堆棧跟蹤我看到的iPhone 4:

0 libSystem.B.dylib calloc 
    1 0x317e8363 
    2 0x317e9c41 
    3 0x318273ff 
    4 0x31827ea5 
    5 0x302ea49d 
    6 0x302ebe07 
    7 0x302eb7c3 
    8 0x302ebcab 
    9 0x303304cd 
    10 UIKit -[UINavigationController _startTransition:fromViewController:toViewController:] 
    11 UIKit -[UINavigationController _startDeferredTransitionIfNeeded] 
    12 UIKit -[UINavigationController viewWillLayoutSubviews] 
    13 UIKit -[UILayoutContainerView layoutSubviews] 
    14 UIKit -[UIView(CALayerDelegate) layoutSublayersOfLayer:] 
    15 CoreFoundation -[NSObject(NSObject) performSelector:withObject:] 
    16 QuartzCore -[CALayer layoutSublayers] 
    17 QuartzCore CALayerLayoutIfNeeded 
    18 QuartzCore CA::Context::commit_transaction(CA::Transaction*) 
    19 QuartzCore CA::Transaction::commit() 
    20 QuartzCore CA::Transaction::observer_callback(__CFRunLoopObserver*, unsigned long, void*) 
    21 CoreFoundation __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ 
    22 CoreFoundation __CFRunLoopDoObservers 
    23 CoreFoundation __CFRunLoopRun 
    24 CoreFoundation CFRunLoopRunSpecific 
    25 CoreFoundation CFRunLoopRunInMode 
    26 GraphicsServices GSEventRunModal 
    27 GraphicsServices GSEventRun 
    28 UIKit -[UIApplication _run] 
    29 UIKit UIApplicationMain 
    30 MyApp main /Users/david/src/MyApp/main.m:14 
    31 MyApp start 

我沒有看到我的代碼的任何地方,並在這裏,我不知道該怎麼檢查與地址的符號是什麼。有任何想法嗎?這可能與我添加的子層有關嗎? (這是我在這裏看到的唯一可以控制的東西。)

感謝您的幫助。

編輯:古棧的問題,指出(謝謝你,古棧),我完全忘了提,這是表示文書起來:

Leaked Object # Address Size Responsible Library Responsible Frame 
GeneralBlock-36864 0x4ff3000 36864 UIKit -[UINavigationController _startTransition:fromViewController:toViewController:] 
+1

你怎麼知道有內存泄漏?是在控制檯中出現的消息?你可以在你的問題中粘貼控制檯輸出嗎? – 2010-12-11 19:44:32

回答

-1

不久之後,我的手機開始表現得很奇怪。我刪除了我的應用程序,重新安裝了它,並且一直無法讓它再次發生。由於之前的版本相當一致並且易於複製,因此我必須將其記錄爲直接的好奇。

謝謝那些提供建議的人。

1

你知道這是一個泄漏?這很可能是一個緩存。 (半相關:我在我的PDF查看應用程序中看到的內存不斷增長,看起來像是一個泄漏,但它顯然是緩存每一頁,當我關閉PDF文檔時,它們全部消失。)

泄漏通常會發生在模擬器以及設備中,它是否發生在那裏?

這是代碼在運行循環中運行,但可能由您的代碼啓動。每當你運行你的代碼時,這個塊是否會泄漏?

+0

好問題。根據泄漏儀器,這是一個泄漏。但是,我無法在模擬器中重現它,並且每次運行我的代碼時都不會泄漏。看起來它可能會在響應內存警告時發生,所以我可能會更仔細一點。 – devguydavid 2010-12-16 04:39:55

+0

然後,您可以嘗試模擬器中的硬件>模擬內存警告。 – 2010-12-21 23:52:48

1

您應該從Xcode「Build」菜單中查看「Build and Analyze」選項。它會從編譯時間的角度向您顯示代碼可能泄漏的位置。

+0

謝謝,是的,我一直在經常運行靜態分析儀。雖然它在幾個地方有所幫助,但它在這裏沒有發現任何東西。 – devguydavid 2010-12-16 04:38:32