【问题标题】:UIImage Animation Causing App to Crash / Memory LeaksUIImage 动画导致应用程序崩溃/内存泄漏
【发布时间】:2013-05-09 09:38:12
【问题描述】:

我正在使用 UIImage 动画,它会导致使用该应用程序的不同用户出现大量内存泄漏和崩溃。

下面是我的代码。我在 viewDidAppear 中预加载了两个动画集

pointsView.image = [UIImage imageNamed:@"C72.png"];

    NSMutableArray *menuanimationImages = [[NSMutableArray alloc] initWithCapacity:21];
    NSString *imageName;

    for( int aniCount = 0; aniCount < 72; aniCount++ )
    {
        imageName = [NSString stringWithFormat:@"C%d.png", aniCount];
        [menuanimationImages addObject:[UIImage imageNamed:imageName]];
    }

    pointsView.animationImages = menuanimationImages;

    pointsView2.image = [UIImage imageNamed:@"I72.png"];

    NSMutableArray *menuanimationImagess = [[NSMutableArray alloc] initWithCapacity:21];
    NSString *imageNames;

    for( int aniCounts = 0; aniCounts < 72; aniCounts++ )
    {
        imageNames = [NSString stringWithFormat:@"I%d.png", aniCounts];
        [menuanimationImagess addObject:[UIImage imageNamed:imageNames]];
    }

    pointsView2.animationImages = menuanimationImagess;
}

然后我使用

运行动画
pointsView.animationDuration = 3.11;
pointsView.animationRepeatCount = 1;
[pointsView startAnimating];

有什么建议吗?

【问题讨论】:

  • 你的图片尺寸是多少?
  • 这是因为你同时使用了 72 张图片,将 png 数量减少到 30 或 40 看看它现在是否崩溃

标签: iphone animation memory sdk memory-leaks


【解决方案1】:

您一次将 72 张 png 图像加载到内存中?根据这些图像的大小,您可能会达到某些旧设备的内存限制,导致它们发出内存警告并最终崩溃。我的建议是不要做 72 图像动画。您可以尝试压缩每张图片,这会降低它们的质量和内存大小,但首先加载 72 张图片来制作动画并不好。

【讨论】:

  • 如果我只在按下按钮时专门加载图像怎么办。你认为这仍然是一个问题吗?
  • 任何时候将这么多图像一次加载到内存中都是一个问题。请记住,移动设备比台式计算机更受限制,尤其是较旧的计算机。如果您将 iPhone 3G 或 iPad 等旧设备连接到您的 Mac,您可能会在控制台中看到一些内存警告消息,同时您可以通过 for 循环为图像分配内存。最终它将耗尽内存并终止应用程序。
  • 是否使用 [example release] 从内存中释放数据;完全从记忆中释放它?这只是一个附带问题。也许如果我从应用程序的其他对象中释放空间,它会起作用。
  • 如果你启用了 ARC,那么执行 example = nil;这告诉系统它不再使用,并且如果需要,可以回收内存,只要没有其他东西指向该对象。否则你可以使用 release。
  • 您是否建议我在应用收到内存警告时停止动画?
【解决方案2】:

请阅读我关于此主题的博文:video-and-memory-usage-on-ios-devices。问题的根源在于您根本无法将这么多图像同时加载到主内存中。你需要根本不使用 UIImageView.animationImages API,它被严重破坏并诱使开发人员编写在设备上运行时会崩溃的糟糕代码。

【讨论】:

    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    相关资源
    最近更新 更多