1

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

有什么建议么?

4

2 回答 2

4

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

于 2013-06-20T22:29:22.740 回答
0

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

于 2013-05-15T00:11:39.513 回答