- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个 iPad 应用程序,由于内存不足,它在 iPad(第一个型号)上崩溃。
在应用程序中,我有一个主视图,它添加了大约 20 个 UIScrollViews
(自定义类)作为 subview ,每个包含一个 UIImageView
和 UIImage
。当用户移动到下一页时,我从父 View 中删除所有这些 subview ,然后将 20 个新的 UIScrollViews
添加到同一 View 。
如果我分析应用程序的分配和内存泄漏,一切正常 - 分配的内存在用户左右滚动时保持在大约 2MB。
但是,如果我查看事件监视器中的实际内存使用情况,我会发现每次用户移动到新页面时,实际内存都会增加大约 20MB。最终在几个新页面之后,应用程序大小达到 150+ MB 并崩溃。
任何人都可以提出可能导致此类行为的原因以及我如何进一步解决此问题吗?
有关应用程序结构的更多信息:
initWithContentsOfFile
加载到 NSMutableArray
中。最佳答案
您不应该在数组中维护这些图像。图像消耗了不成比例的有限 RAM。有几种方法:
如果您想保持简单,请不要将图像存储在任何地方。通过 initWithContentsOfFile
加载图像,加载 UIImageView
的 image
属性,收工。
如果出于性能原因需要一些 RAM 缓存,可以使用 imageNamed
而不是 initWithContentsOfFile
。当应用收到内存警告时,缓存将自动清除。
我倾向于使用 initWithContentsOfFile
,但随后手动缓存在我自己的 NSCache
中(这类似于 NSDictionary
,除了您可以设置一个 countLimit
它应该卡在多少图像上)。
顺便说一句,您没有描述“用户移至下一页”时技术上发生的情况。如果您只是刷新现有 View Controller 上的现有控件,那么一切可能都很好(一旦您解决了我上面讨论的 NSMutableArray
问题)。如果您正在推送/呈现给另一个 View Controller 或将控件滚动到屏幕外但忽略了从他们的 super View 中删除旧的,那么这也会导致问题。你可能想澄清你在那里做什么。
最重要的是,您只需要确保当您从一个页面转到另一个页面时,您没有维护对任何旧图像或控件的强引用。
关于ios - 实际内存不断增加 - 从 View 中删除 subview - iOS (ARC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16253523/
如果这不是一个错误,那就是另一个错误。如果不是那样的话,那就是别的东西了。我觉得我的项目已经改变了很多,现在只是试图解决代码签名问题,结果一切都搞砸了。我严格按照说明进行操作,但出现错误,例如当前的“
我不确定是否有一些我不知道的内置变量或规则,或者 make 是否有问题,或者我只是疯了。 对于我的一个项目,我有一个如下的 makefile: CC=g++ CFLAGS=-O3 `libpng-co
我有大约 10 个 div,它们必须不断翻转,每个 div 延迟 3 秒 这个 codrops 链接的最后一个效果是我正在寻找的,但无需单击 div http://tympanus.net/Devel
我如何使用 jQuery 持续运行 PHP 脚本并每秒获取响应,以及将鼠标上的少量数据发送到同一脚本? 我真的必须添加一些随机扩展才能让这么简单的计时器工作吗? 最佳答案 To iterate is
JBoss 4.x EJB 3.0 我见过如下代码(大大简化): @Stateless @TransactionAttribute(TransactionAttributeType.NOT_SUPPO
使用 PHPStorm,我试图忽略每次尝试进行 git 提交时 pop 的 workspace.xml。 我的 .gitignore 看起来像: /.idea/ .idea/workspace.xml
我是一名优秀的程序员,十分优秀!