为视图释放支持层以回收内存?

Posted

技术标签:

【中文标题】为视图释放支持层以回收内存?【英文标题】:Release backing layer for a view to reclaim memory? 【发布时间】:2011-05-30 15:23:07 【问题描述】:

我有一个自定义选项卡小部件,其中有很多视图,其支持 CALayer 对象占用了太多内存。我正在考虑发布背景选项卡的视图,但如果我可以要求框架释放支持的 CALayer(这是大部分内存所在的位置)并让它按需重新创建它会更简单。这可能吗?

嵌套视图层次结构是否比平面视图层次结构消耗更多内存,因为有更多的 CALayer 对象,且像素大多相同?如果 100 x 100 的视图占用 X 内存,是否意味着带有 100x100 子视图的 100 x 100 视图大约占用 2 倍?

为什么 Apple 不采用由程序员控制哪些视图具有支持核心动画层的 AppKit 模型?这将消耗更少的内存,与 OS X 相比,这在 ios 上是稀缺的。谢谢。

【问题讨论】:

【参考方案1】:

iOS 上的所有视图都是层支持的,您无法控制。

您应该只释放非活动视图并根据需要重新加载它们。

视图在 iOS 上以层为后盾的原因是 GPU 承担了大部分繁重的工作。这大大减少了 CPU 负载,以便 CPU 可以用于实际工作或被节流以节省电力。

【讨论】:

是的,我明白这一点。我想说的是,当给定视图的子视图没有独立动画或移动,并且都是不透明的时,是否需要为每个子视图设置单独的图层,而不是只为父视图设置一个图层?无论如何,感谢您的回答。

以上是关于为视图释放支持层以回收内存?的主要内容,如果未能解决你的问题,请参考以下文章

怎样释放JAVA程序运行中所用的内存

PHP 垃圾回收 GC 机制人工介入释放内存

PHP 垃圾回收 GC 机制人工介入释放内存

如果/啥时候释放的堆内存被回收?

如何释放子视图控制器的内存

Centos清理内存 内存回收释放及内存使用查看的相关命令