应用程序在iPad 1中没有任何内存警告但在iPad 3中工作时崩溃

时间:2013-01-22 05:39:06

标签: ios objective-c xcode ipad

当我们在iPad1中使用以下代码时应用程序崩溃,但它在iPad3中运行良好。

roboObj.animationImages=[NSArray arrayWithObjects:[UIImage imageNamed:@"p4Robot1.png"],[UIImage imageNamed:@"paot4.png"],[UIImage imageNamed:@"4Robot5.png"],[UIImage imageNamed:@"pagot8.png"],[UIImage imageNamed:@"page4t9.png"],[UIImage imageNamed:@"page10.png"],[UIImage imageNamed:@"pabot11.png"],[UIImage imageNamed:@"pagt12.png"],[UIImage imageNamed:@"page4ot13.png"],[UIImage imageNamed:@"pbot2.png"],[UIImage imageNamed:@"paot3.png"],[UIImage imageNamed:@"page.png"],[UIImage imageNamed:@"pagt15.png"],[UIImage imageNamed:@"page4t16.png"],[UIImage imageNamed:@"pagbot17.png"],[UIImage imageNamed:@"pa18.png"],[UIImage imageNamed:@"page18.png"],[UIImage imageNamed:@"pa18.png"],[UIImage imageNamed:@"pag18.png"],[UIImage imageNamed:@"page8.png"],[UIImage imageNamed:@"pagbot18.png"],[UIImage imageNamed:@"paot17.png"],[UIImage imageNamed:@"pot16.png"],[UIImage imageNamed:@"pt15.png"],nil];
        roboObj.animationDuration=4;
        roboObj.animationRepeatCount=1;
        [roboObj startAnimating];

有时我收到内存警告“收到内存警告。等级= 1”& “收到内存警告。等级= 2”。

任何人都可以告诉我如何解决这个问题。 任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:0)

您需要在尝试重复动画时更改加载图像的方式。我不确定这是否是您正在寻找的确切答案,但在某种程度上您会明白这一点。

看一下这篇文章......

UIImageView AnimationImages Memory Leak

我们都知道要使用UIImageView做动画,我们在NSArray中加载图像,然后将其设置为UIImageView的animationImages属性,然后调用函数startAnimating。 但是当您尝试通过使用此方法一次又一次地使用不同的图像加载来重复动画时,您会在Xcode调试时在状态为101的iPhone设备上遇到崩溃。同样,我们都知道为什么它崩溃了,只是因为iPhone设备中我们的应用程序没有更多内存可用。 但是我们的记忆在哪里。这就是答案。每当我们将NSArray设置为animationImages时,整个数据都会被复制到它,因为animationImages是UIImageView的复制属性。如果我们尝试再次使用其他NSArray设置相同的animationImages,我们首先尝试将其设置为nil,然后使用新数组进行设置。但是我们错了,当我们没有这个属性时,实时内存会减少,但虚拟内存不会减少,因为垃圾收集器不在那里。 所以相反,我们应该调用此属性的release方法,这将强制它从虚拟内存中释放出来。还有一件事你应该记住,不要调用这个属性的release方法,或者不要尝试在你的UIImageView引用被释放的dealloc方法中取消这个属性,否则你将得到Bad Parameter警告或者再次虚拟内存将无法获得释放。

示例代码也是here

答案 1 :(得分:0)

也许你的图片太大了。 iPad 1无论如何都没有视网膜显示器。将图像缩小到一半大小,然后重试。