UIImage动画导致应用程序崩溃/内存泄漏

时间:2013-05-14 23:38:38

标签: iphone animation memory sdk memory-leaks

我正在使用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];

有什么建议吗?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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