【问题标题】:App crashes without any memory warning in iPad1 but working in iPad3应用程序在 iPad 1 中崩溃而没有任何内存警告,但在 iPad 3 中运行
【发布时间】:2013-01-22 05:39:05
【问题描述】:

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

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

【问题讨论】:

  • 在动画运行期间是否会在 ipad 1 上崩溃?或者它甚至没有启动?
  • 是的,它在 iPad 1 和 2 上崩溃,而不是在模拟器中

标签: ios objective-c xcode ipad


【解决方案1】:

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

看看这篇文章...

UIImageView AnimationImages Memory Leak

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

还给出了示例代码here

【讨论】:

  • 我尝试了这段代码,但当我一次又一次地播放相同的动画时,我的 iPad 仍然崩溃。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    相关资源
    最近更新 更多