【问题标题】:iPad App Crashes After Loading 30+ Images加载 30 多张图片后 iPad 应用程序崩溃
【发布时间】:2012-07-26 16:56:35
【问题描述】:

使用此代码在图像视图中快速加载 30 多张图像后 ipad 崩溃并重新启动是否有原因:

else if([webData isEqualToString:@"ppt33"]){
    if(movieisplaying == @"yes"){
        UIImage *image = [UIImage imageNamed: @"33.png"];
        [imageView setImage:image];
        [moviePlayerController stop];
        [moviePlayerController.view removeFromSuperview];
        movieisplaying = @"no";
    }
    else{
        UIImage *image = [UIImage imageNamed: @"33.png"];
        [imageView setImage:image];

    }
}

编辑: 崩溃错误 - 2012-07-26 13:48:55.172 Stream[5554:707] 收到内存警告。

【问题讨论】:

  • 你能把它崩溃时得到的错误贴出来吗?
  • @KarolyS 确定它在我的编辑中
  • 嗯,你的图片有多大?您可以尝试加载说 25 吗? 20?尝试找到在崩溃之前可以加载的最大值。
  • @KarolyS 我有大约 40 张图片和 4 个视频,该应用程序不会因视频而崩溃,但在大约 32 张图片后它崩溃了。如果不使用,有什么方法可以“销毁”和映像?

标签: ios image crash uiimageview


【解决方案1】:

所有图像和视频是否都在使用/可见?从警告看来,您可能超出了为您的应用分配的内存。

这个问题似乎是相关的,Received memory warning 虽然它没有详细说明如何销毁未使用的图像。我想说当你加载什么图像时要聪明一点,如果你不再使用它,然后释放它。视频也是如此。希望对您有所帮助!

编辑:你可以这样做:

NSMutableArray * imageArray;

imageArray = [[NSMutableArray alloc] init];

UIImage *oneImage = [UIImage imageNamed: @"33.png"];
[imagesArray addObject:oneImage];
[oneImage release];
//Add the remaining images, could probably turn this into a for loop

或者,在您试一试之前,您可以尝试在您提供的 else 语句中的所有内容之后执行 [image release]。

【讨论】:

  • 每次图像更改时,我都使用此代码(使用不同的文件名):UIImage *image = [UIImage imageNamed: @"34.png"]; [imageView setImage:image]; 我对视频使用类似的代码,但图像是问题所在;有什么办法可以解决这个问题吗?
  • 我无法想象是什么原因导致您出现这种情况,因为乍一看,您所写的内容似乎是正确的。如果我处于你的位置,我会尝试将所有 40 个图像加载到 viewDidLoad 或任何地方的 UIImage 数组中,然后只需执行 [imageView setImage:imageArray[34]];原因是,我有一种感觉,如果您要运行内存监控工具,您会看到自己重复创建图像,而不会删除未使用的图像。每张图片在内存中大概有多大?
  • 图片大小从 0.5mb 到 1.2mb,如何创建 UIImage 数组?
  • @Nathan Niamehr 嗯,您可能想尝试压缩它们,我认为 1.2 mb 的可能会伤害您。我还更新了我的答案,尝试了更多尝试。
  • 感谢您的帮助,我试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-26
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-23
相关资源
最近更新 更多