2011-01-30 56 views
0

在我的應用程序中,我將多個圖像加載到UIScrollView上,並使用Core Graphics例程突出顯示部分滾動視圖。我在例程中使用了CGImageRelease和CGContextRelease來管理內存。UIImage ImageNamed方法

當我使用儀器(分配)運行應用程序時,我發現隨着scrollView的每次滑動,內存消耗都會持續上升。這一點導致應用程序變得非常慢。

對於加載不同的圖像,我使用UIImage ImageNamed方法,我遇到了一些帖子,指出這不是一個好主意,因爲該方法會導致創建內存問題的自動釋放圖像。我想知道我是否正在尋找錯誤的正確位置。有什麼地方可以尋找這種不尋常的內存消耗?

此外,使用Instruments的分配,我可以看到內存的增加,是否可以將代碼指向哪些分配發生的位置?

在此先感謝您的幫助!

最佳 DKV

回答

0

對於加載不同的圖像,我用的UIImage ImageNamed方法,我也接觸過一些帖子,表明這是不是因爲在自動釋放圖像的方法結果一個好主意,它創建的內存問題。

不,這不是問題。任何不涉及你自己打電話allocinit [WithSomethingOrOther:]和release自己將獲得圖像autoreleased。

問題在於imageNamed:在它交給你之後繼續擁有圖像。您從imageNamed:獲取的每張圖片均保留在該緩存中,並與該名稱永久關聯。這不僅僅是一個「加載這個圖像」的方法;這是一個「加載這個圖像並永久保存它」的方法。

*凡「永遠」的意思是「直到我的過程結束」。

我想知道我是否正在尋找錯誤的正確位置。有什麼地方可以尋找這種不尋常的內存消耗?

儀器中。它會告訴你究竟有多少種你正在創建的對象,以及每種類型的總內存對象佔用了多少,並且你可以對該列表進行排序以確定什麼是內存消耗。然後,您可以深入到每個類和每個對象中,以確定在需要它們之後保持對象的活性。

+0

請問你怎麼知道「這是一個永遠活着的方法」?我可以得到正式的參考或聲明嗎? – 2014-10-28 04:55:14

相關問題