2

当我们在 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”。

谁能告诉我如何解决这个问题。任何帮助将不胜感激。

4

2 回答 2

0

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

看看这篇文章...

UIImageView AnimationImages 内存泄漏

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

示例代码也在这里给出。

于 2013-01-22T07:25:52.893 回答
0

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

于 2013-01-22T07:26:09.653 回答