【问题标题】:Memory issue while Animating many images为许多图像设置动画时出现内存问题
【发布时间】:2015-05-13 08:03:48
【问题描述】:

我有大约 272 层图像用于为我的视图背景设置动画。下面是关于如何为图像设置动画的示例代码。但是这样做我遇到了内存问题和应用程序崩溃。有什么建议吗?

NSMutableArray *imagesArray = [NSMutableArray array];

for (int i = 272; i >=1; i--)
{
    NSString *imageName = [NSString stringWithFormat:@"layer-%d.jpg", i];
    UIImage *bgImage =[UIImage imageNamed:imageName];

    [imagesArray addObject:bgImage];
}

[self.bgImageView setAnimationDuration:7.0f];
[self.bgImageView  setAnimationImages:imagesArray];
[self.bgImageView  startAnimating];

【问题讨论】:

  • 每张图片的尺寸是多少?
  • 所有 272 张图片的总大小约为 5 mb。
  • 你可以尝试评论这段代码并再次测试,我想确定这部分是内存问题的原因还是其他部分
  • 是的,当我评论这段代码时它工作正常,但它当然不会动画:P。我也可以在模拟器上看到动画,似乎可以工作一段时间,但在设备上它会立即崩溃。

标签: ios objective-c ipad xcode6 uianimation


【解决方案1】:

使用 [UIImage imageNamed:] 将图像缓存在内存中,尝试使用 [UIImage imageWithContentOfFile:]。检查这个answer

【讨论】:

  • 试过了,还是一样的问题。这是我从 xcode 收到的消息 - 来自调试器的消息:因内存压力而终止
  • 您的内存不足,因为在 iOS 下您不能同时在内存中拥有那么多图像(没有虚拟内存)。你可以在stackoverflow上找到很多解决问题的方法,但基本上你不能做你现在正在做的事情。
【解决方案2】:

添加到数组后尝试释放uiimage的对象:

NSMutableArray *imagesArray = [NSMutableArray array];
for (int i = 272; i >=1; i--)
{
    NSString *imageName = [NSString stringWithFormat:@"layer-%d.jpg", i];
    UIImage *bgImage =[UIImage imageNamed:imageName];
    [imagesArray addObject:bgImage];
    bgImage=nil;
    imageName=nil;
 }
    [self.bgImageView setAnimationDuration:7.0f];
    [self.bgImageView  setAnimationImages:imagesArray];
    [self.bgImageView  startAnimating];

或者尝试在循环外声明 uiimage 并在每个循环中重用它:

NSMutableArray *imagesArray = [NSMutableArray array];
UIImage  *bgImage;
NSString *imageName;
for (int i = 272; i >=1; i--)
{
    imageName = [NSString stringWithFormat:@"layer-%d.jpg", i];
    bgImage =[UIImage imageNamed:imageName];
    [imagesArray addObject:bgImage];
 }
    [self.bgImageView setAnimationDuration:7.0f];
    [self.bgImageView  setAnimationImages:imagesArray];
    [self.bgImageView  startAnimating];

【讨论】:

  • 我认为这不会解决问题。他正在使用 ARC,图像将被自动释放
猜你喜欢
  • 2011-07-04
  • 2012-07-14
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多