2011-01-24 154 views
2

我正在編寫一個使用大量視頻和大型PNG動畫序列的iPad應用程序,在不再需要時請注意釋放所有資源。儀器沒有顯示內存泄漏,分配顯示應用程序永遠不會分配超過30 MB的內存。但是,當我查看活動監視器時,我發現真正的內存和虛擬內存在不斷增加,因此越多人對應用程序的內容進行深入研究。我把NSLog放在了所有的dealloc方法中,並且我釋放的每個對象都被釋放。然而,我的應用程序正在被信號0殺死。有沒有人有任何建議?iPad內存使用量不斷增加

+0

用儀器檢查一段時間後仍然存在的物體。 – Eiko 2011-01-24 23:55:29

回答

2

您可能已經這樣做了,但是在使用Allocations工具時,在與UI進行交互時請執行「堆放」。這會讓你知道在每個時間間隔和對象的生命週期中分配了什麼。比爾Bumgarner有一個excellent blog entry關於這個強大的工具,非常值得一讀。

+0

對於每個堆快照,Instruments顯示的增長少於100 KB。然而,每當我改變我的應用程序的狀態時,VM Tracker中的骯髒大小,常駐大小和虛擬大小都會大幅增長並持續增長(大約11 MB)。正如我在原始文章中所說的,儘管我釋放的每個自定義對象都被取消分配。 – Jacob 2011-01-25 14:51:43

+0

哦,我也沒有得到任何低內存警告。 – Jacob 2011-01-25 15:54:10

2

難道你有NSZombieEnabled?發生在我身上的一次...

0

WWDC 2011會議318視頻「iOS性能深入」(大約43分50秒)介紹瞭如何在UIImageView中激活UIImage可以使用大量內存。他們建議在使用動畫大圖像時使用

- (void) animateImages 
{ 
    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateImage:)]; 
} 

- (void) animateImage:(CADisplayLink *)link 
{ 
    [imageView setImage:[UIImage imageWithContentsOfFile:nextImagePath()]]; 
} 

動畫速度無法保證。使用+ [UIImage imageWithContentsOfFile:]是關鍵,因爲+ [UIImage imageNamed:]將緩存圖像實例。

我已經在我的應用程序中使用了這種技術,這種技術可以在內存之間切換,在大型圖像動畫組之間切換,並且在iPhone 3GS和iPhone 4S上工作的很好且流暢。它在iPhone 3GS上很慢,但3GS甚至無法做一組動畫。查看虛擬機跟蹤器中的髒大小統計信息,其差異非常顯着。