通过使用另一个支持层减少 UILabel 的内存

Posted

技术标签:

【中文标题】通过使用另一个支持层减少 UILabel 的内存【英文标题】:Reduce memory for UILabel through using another backing layer 【发布时间】:2015-08-18 14:14:22 【问题描述】:

我正在使用一个大尺寸的标签,它占用了太多的内存。该问题在UILabel (CALayer) is using large amounts of virtual memory 和How to suck down ios memory without even trying 中进行了描述。

是否可以通过例如交换UILabel 的支持层? CATiledLayer?

我要做的是减少UILabel 的已用内存。例如,使用清晰的背景颜色并没有帮助。不知道这到底是什么意思:

但是你没有响应 drawRect 方法来绘制你的视图的内容

【问题讨论】:

您正在为哪些设备编程? iOS 设备,例如 iPhone、iPad、iPod touch。 你想要完成什么,为什么这对你来说是个问题? IOS 设备很明显,IOS、iphone 4 有哪些特定设备? iphone 5,iphone 6,Ipad 2,哪一个? 我有内存问题。见here。所有支持 iOS 7 及更高版本的设备。这意味着 iPhone 4、iPad 2 以及随后的所有世代。 【参考方案1】:

您不能用CATiledLayer 支持UILabel,但也没有理由这样做。如果您要切换到CATiledLayer(这可能是正确的解决方案),那么无论如何您都必须管理自己的布局。一旦你这样做了,UILabel 就不会给你买太多东西。只需使用UIView 并按照您的建议平铺即可。

也就是说,您链接的问题讨论了创建 500 UILabels。这是一个疯狂的标签数量。您应该使用其他工具,例如 CATiledLayer、infinite UIScrollViewUITableView 等,以便您管理较少数量的可重用视图。

【讨论】:

"并且不要使用 xamarin" ;-) 实际上“不使用 xamarin”的另一个原则原因是 Rob 无法回答有关它的问题 :-) 嗯,这应该是不言而喻的。我没有在链接的问题中注意到这一点。是的,Xamarin 将使一切变得更加困难,尤其是当性能受到任何关注时。在金属附近完成高性能移动设备已经够难的了;通过一个 Apple 无法帮助您的抽象层来实现它是一个艰难的选择。 robnapier.net/product-or-process 这只是一个大标签,但这足以在一段时间后杀死应用程序。所以我必须使用另一种机制。感谢您的澄清。

以上是关于通过使用另一个支持层减少 UILabel 的内存的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记TF014:卷积层激活函数池化层归一化层高级层

如何在 AS3 中加载图像精灵序列时减少内存使用量

iOS - UILabel(CALayer) - VMalloc 内存不断增加

如何将 UILabel 的属性反映到另一个?

如何从我的 XCODE 上的另一个选项卡更改 UILabel 值

自动布局 - 将一个 UILabel 的原点替换为另一个