ios – 由于已知原因导致的内存压力终止,未知解决方案

ios – 由于已知原因导致的内存压力终止,未知解决方案,第1张

概述我的应用程序由于应用程序使用中某个点的内存压力而终止,我已将问题分解为造成问题的一大块代码. 我将复制下面的代码块,但首先我将描述它正在做什么. 说明: 我有一个迭代浏览视频列表的for循环.对于每个视频,for循环增加包含滚动视图的大小,绘制标签和按钮(均与视频有关),并异步抓取视频的缩略图并将其放在按钮下方. 问题: 抓住缩略图部分就是问题所在.我不认为这是异步完成的事实是问题,因为我已经同步 我的应用程序由于应用程序使用中某个点的内存压力而终止,我已将问题分解为造成问题的一大块代码.

我将复制下面的代码块,但首先我将描述它正在做什么.

说明:

我有一个迭代浏览视频列表的for循环.对于每个视频,for循环增加包含滚动视图的大小,绘制标签和按钮(均与视频有关),并异步抓取视频的缩略图并将其放在按钮下方.

问题:

抓住缩略图部分就是问题所在.我不认为这是异步完成的事实是问题,因为我已经同步尝试并且终止仍然发生.当我注释掉抓取缩略图的代码(下面代码中的整个异步部分)时,应用程序不会崩溃.

代码:

注意:为简洁起见,我在某些情况下使用注释替换代码.

for (int i = [_vIDeoURLs count]-1; i >= 0 ; i--)    {        //increase the scrollvIEw size        //get background image:        dispatch_async(screenshotQueue,^{            AVURLAsset *as = [[AVURLAsset alloc] initWithURL:currentURL options:nil];            AVAssetimageGenerator *ima = [[AVAssetimageGenerator alloc] initWithAsset:as];            ima.applIEsPreferredTrack@R_404_4154@ = YES;            NSError *err = NulL;            CMTime time = CMTimeMake(1,24);            CGImageRef imgRef = [ima copyCGImageAtTime:time actualTime:NulL error:&err];            UIImage *thumbnail = [[UIImage alloc] initWithCGImage:imgRef];            dispatch_async(dispatch_get_main_queue(),^{                UIImageVIEw *backgroundImage = [[UIImageVIEw alloc]initWithFrame:buttonFrame];                backgroundImage.image = thumbnail;                backgroundImage.layer.opacity = 0;                [self.vIDeoScrollVIEw addSubvIEw:backgroundImage];                [self.vIDeoScrollVIEw sendSubvIEwToBack:backgroundImage];                [UIVIEw animateWithDuration:0.5 delay:0.0 options: UIVIEwAnimationoptionCurveEaseInOut                 animations:^{                     backgroundImage.layer.opacity = 1;                 }                 completion:^(BOol finished){}];            });        });        //add Title to the screen caps        //draw the button    }

我正在使用Xcode 5,在iOS 7的新设备上进行测试.我是自学成才的,所以我确信我已经找到了一些不良习惯,但我希望我错过了一些明显的东西.有经验的人会接受.

我已经尝试了相当数量的谷歌搜索和搜索堆栈溢出,并尝试查看诊断,日志和内存配置文件,以进一步隔离问题,无济于事.

任何帮助将不胜感激!

编辑:

如何重现错误:

>转到视频列表
>保留视频列表
>重复1 2 4或5次导致崩溃

步骤2.简单地从其超级视图中删除整个scrollVIEw,然后重绘它.我知道每次回到视频列表都没有必要重新绘制视频列表,但我出于某种原因这样做,我不相信这是问题的根源(我可能是错的).

编辑2:

这是内存配置文件的图像:

解决方法 你展示的代码有很大的漏洞.您正在创建一个Core Foundation对象:
CGImageRef imgRef = [ima copyCGImageAtTime:time actualTime:NulL error:&err];

但我没有看到相应的CFRelease.

你的代码应该是:

CGImageRef imgRef = [ima copyCGImageAtTime:time actualTime:NulL error:&err];UIImage *thumbnail = [[UIImage alloc] initWithCGImage:imgRef];CFRelease(imgRef);
总结

以上是内存溢出为你收集整理的ios – 由于已知原因导致的内存压力终止,未知解决方案全部内容,希望文章能够帮你解决ios – 由于已知原因导致的内存压力终止,未知解决方案所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1101211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存