gpt4 book ai didi

ios - 在自定义 CALayer 上设置 contentScale 后,核心动画使用了太多内存

转载 作者:行者123 更新时间:2023-11-30 13:39:16 25 4
gpt4 key购买 nike

我正在使用自定义 CALayer 为键盘扩展绘制一些 UI,并且在添加该行后我注意到 CoreAnimation 占用了大量内存

self.contentsScale = UIScreen.mainScreen().scale

整个应用程序的核心动画对象的总内存使用量从 4 MB 跃升至 15 MB。我通过在我的设备上进行分析并查看内存使用情况看到了这一点。

这会导致我的扩展在 6+ 上崩溃

即使我实际上没有画任何东西,这也是正确的。我已经从drawInContext中取出了所有内容,但它仍然可以重现。

override func drawInContext(context: CGContext) 
{
}

该图层确实跨越了我的整个键盘,因为我想在不同的点绘制一些 ui 元素,并且我需要设置内容比例,因为我想在图层中绘制一些文本,如果没有比例,它看起来都是模糊。

有人知道如何减少内存占用吗?

这只是 iPhone 6 plus 上的问题

最佳答案

空的 drawInContext: 实现仍然会导致分配,因为与 -[UIView drawRect:] 方法一样,重写此方法会告诉 iOS 您想要进行自定义绘制,这要求分配一个后备存储来存储图层绘制的结果。

假设没有进行巧妙的优化,内存中数据的大小至少为键盘宽度 * 键盘高度 * 屏幕比例 * 每个像素的颜色分量 * sizeof(CGFloat)375 * 216 * 3 * 4 * 8 = ~7mb 对于与 64 位 iPhone 6+ 上的原装键盘尺寸相同的键盘。

值得注意的是,除非没有其他选择,否则应避免重写 drawInContext:drawRect:。除非您心中有一些特殊的文本效果,并且您知道如果没有定制的绘图代码就无法实现,否则 iOS 提供了许多更易于使用且性能更高的选项,例如 UILabelCATextLayer,甚至正确准备的 CAShapeLayer

关于ios - 在自定义 CALayer 上设置 contentScale 后,核心动画使用了太多内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35755949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com