真实内存不断增加 – 从视图中删除子视图 – iOS(ARC)

真实内存不断增加 – 从视图中删除子视图 – iOS(ARC),第1张

概述我有一个iPad应用程序崩溃在iPad(第一个模型),因为它的内存不足. 在应用程序中,我有一个主视图,它添加了20个UIScrollViews(自定义类)的子视图,每个UIScrollViews包含一个UIImageView和UIImage.当用户移动到下一页时,我从superview中删除所有这些子视图,然后将20个新的UIScrollView添加到同一视图中. 如果我分析应用程序的分配和内存 我有一个iPad应用程序崩溃在iPad(第一个模型),因为它的内存不足.

在应用程序中,我有一个主视图,它添加了20个UIScrollVIEws(自定义类)的子视图,每个UIScrollVIEws包含一个UIImageVIEw和UIImage.当用户移动到下一页时,我从supervIEw中删除所有这些子视图,然后将20个新的UIScrollVIEw添加到同一视图中.

如果我分析应用程序的分配和内存泄漏一切都很好 – 分配的内存大约保持在2MB左右,而用户向左和向右滚动.

但是,如果我查看活动监视器中的实际内存使用情况,我可以看到每次用户移动到新页面时,实际内存增加大约20MB.最终在一些新页面后,应用程序大小达到150 MB并崩溃.

任何人都可以建议可能导致此类行为的原因以及如何进一步解决此问题?

关于应用程序结构的更多信息:

>在视图中加载图像使用initWithContentsOffile加载到NSMutableArray中.

解决方法 您不应该在阵列中维护这些图像.图像消耗的RAM数量不成比例.有几种方法:

>如果您想保持简单,只是不要将图像存储在任何地方.通过initWithContentsOffile加载图像加载UIImageVIEw的image属性并调用它一天.
>如果出于性能原因需要一些RAM缓存,可以使用imageNamed而不是initWithContentsOffile.当应用程序收到内存警告时,将自动清除缓存.
>我倾向于使用initWithContentsOffile,但是然后手动缓存在我自己的NSCache(这就像一个NSDictionary,除了你可以设置一个countlimit它应该挂多少个图像).

顺便说一句,您没有描述“当用户移动到下一页时”技术上发生了什么.如果你只是刷新现有视图控制器上的现有控件,那么一切都很好(一旦修复了我上面讨论的NSMutableArray问题).如果您正在推送/呈现给另一个视图控制器或在屏幕上滚动控件而忽略从超级视图中删除旧控件,那么这也会导致问题.你可能想澄清一下你在那里做什么.

最重要的是,您只需要确保当您从一个页面转到另一个页面时,您没有保持对任何旧图像或控件的强引用.

总结

以上是内存溢出为你收集整理的真实内存不断增加 – 从视图中删除子视图 – iOS(ARC)全部内容,希望文章能够帮你解决真实内存不断增加 – 从视图中删除子视图 – iOS(ARC)所遇到的程序开发问题。

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

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

原文地址: https://www.outofmemory.cn/web/1020791.html

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

发表评论

登录后才能评论

评论列表(0条)

保存