在自定义 CALayer 上设置 contentsScale 后核心动画使用了太多内存
Core animation using too much memory after I set contentsScale on custom CALayer
我正在使用自定义 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 您想要进行自定义绘图,这需要后备存储分配用于存储图层的绘制结果。
假设没有进行巧妙的优化,内存中此数据的大小至少为 width of the keyboard * height of the keyboard * screen scale * color components per pixel * sizeof(CGFloat)
,或者对于与64 位 iPhone 6+.
值得注意的是,除非别无选择,否则应避免覆盖 drawInContext:
或 drawRect:
。除非你有一些特殊的文字效果,你知道如果没有定制的绘图代码就无法实现,iOS 提供了许多选项,这些选项更易于使用 和 更高的性能,例如 UILabel
、CATextLayer
,甚至是适当准备的 CAShapeLayer
s.
我正在使用自定义 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 您想要进行自定义绘图,这需要后备存储分配用于存储图层的绘制结果。
假设没有进行巧妙的优化,内存中此数据的大小至少为 width of the keyboard * height of the keyboard * screen scale * color components per pixel * sizeof(CGFloat)
,或者对于与64 位 iPhone 6+.
值得注意的是,除非别无选择,否则应避免覆盖 drawInContext:
或 drawRect:
。除非你有一些特殊的文字效果,你知道如果没有定制的绘图代码就无法实现,iOS 提供了许多选项,这些选项更易于使用 和 更高的性能,例如 UILabel
、CATextLayer
,甚至是适当准备的 CAShapeLayer
s.