2013-12-19 26 views
4

我正在尋找減少我的應用程序的內存使用情況,我們可能會浪費內存的一個地方是我們使用autoreleasepools。我認爲我們現在在任何地方都有他們,但我不確定,所以我想在戰略點進行一些衡量,看看更多@autoreleasepool塊是否有用。如何瞭解iOS上autoreleasepools的內容?

我做了一些研究,發現了有關調查autoreleasepools以下方法,這可能在過去的工作,但顯然沒有任何更多的,至少在XCode中5:

  • +[NSAutoreleasePool showPools] - 這意味着打印有關活動autoreleasepools信息,但似乎並沒有做任何事 - 的XCode不認爲這是一個事

  • _objc_autoreleasePoolPrint - 我發現對堆棧溢出這種功能的一些參考,但XCode堅持認爲它不存在,並且不會鏈接它我若爲外部

我們的代碼庫是足夠大,只是堅持額外autoreleasepools到處將是一個傻瓜的差事,所以我正在尋找的是找出在有多少個對象」的方式游泳池「在任何特定的時間。這樣我就可以爲需要它們的少數地方添加更多池,而不是將它們扔到任何地方。

如果我必須在樂器或調試器中找到答案,那不是問題 - 這只是我們用來測試的東西,並且不會在發佈中發佈。

感謝您的幫助!

+0

嘗試向'_objc_autoreleasePoolPrint'外部添加弱導入屬性('__attribute __((weak_import))')。 –

+0

可悲的是,同樣的鏈接錯誤。 :( – Colen

回答

0

在這種情況下使用儀器將是一個好主意,因爲它會提供大量額外信息,可以幫助您更好地瞭解應用程序的內存使用情況。作爲一般的介紹,我建議會議修復內存問題的2013 WWDC

而且here是答案的鏈接有一些很好的小竅門

如果你真的想檢查內存使用一些特定的代碼段,您可以添加一些NSLog()在控制檯中打印時間戳,並使用它們查找圖表中的時間間隔,但我發現將數據作爲一個整體進行查看並嘗試獲得內存圖儘可能統一,自動釋放池可以通過更均勻地分配使用來幫助實現此目的。