2011-01-24 153 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甚至无法做一组动画。查看虚拟机跟踪器中的脏大小统计信息,其差异非常显着。