我正在编写一个使用大量视频和大型PNG动画序列的iPad应用程序,注意在不再需要时释放所有资源。仪器显示没有内存泄漏,分配显示应用程序永远不会分配超过大约30 MB。但是,当我查看Activity Monitor时,我发现实际内存和虚拟内存不断增加,越是深入研究应用程序的内容。我将NSLogs放在我的所有dealloc方法中,并且我释放的每个对象都被释放。然而,我的应用程序因信号0而被杀死。有没有人有任何建议?
答案 0 :(得分:2)
您可能已经这样做了,但在使用Allocations乐器时,在与UI交互时拍摄“Heap Shots”。这将让您了解在每个间隔期间分配的内容以及对象的生命周期。 Bill Bumgarner有一个关于这个功能强大的工具的excellent blog entry,值得一读。
答案 1 :(得分:2)
难道你有NSZombieEnabled吗?发生在我身上一次......
答案 2 :(得分: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之前甚至不能做一套动画。查看VM Tracker中的Dirty Size统计数据,差异非常大。