DrawRect 内存问题

Posted 玉思盈蝶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DrawRect 内存问题相关的知识,希望对你有一定的参考价值。

DrawRect实现画板将会大量产生内存问题。

具体请看:http://bihongbo.com/2016/01/03/memoryGhostdrawRect/

 

可能的原因有两个:

 

一是在手指绘制的过程中创建的大量点对象没有及时释放或者其他资源没有及时释放。

二是系统在绘制的过程中开始大量消耗内存。

 

最合理的办法处理类似于画板这样画线条的需求直接用专有图层CAShapeLayer。让我们看看它是什么:

CAShapeLayer是一个通过矢量图形而不是bitmap来绘制的图层子类。用CGPath来定义想要绘制的图形,CAShapeLayer会自动渲染。它可以完美替代我们的直接使用Core Graphics绘制layer,对比之下使用CAShapeLayer有以下优点:

  • 渲染快速。CAShapeLayer使用了硬件加速,绘制同一图形会比用Core Graphics快很多。
  • 高效使用内存。一个CAShapeLayer不需要像普通CALayer一样创建一个寄宿图形,所以无论有多大,都不会占用太多的内存。
  • 不会被图层边界剪裁掉。
  • 不会出现像素化

总结一下绘制性能优化原则:

  • 1.绘制图形性能的优化最好的办法就是不去绘制。
  • 2.利用专有图层代替绘图需求。
  • 3.不得不用到绘图尽量缩小视图面积,并且尽量降低重绘频率。
  • 4.异步绘制,推测内容,提前在其他线程绘制图片,在主线程中直接设置图片。

以上是关于DrawRect 内存问题的主要内容,如果未能解决你的问题,请参考以下文章

iPad上的drawRect导致内存问题

内存恶鬼drawRect

空drawRect实现导致内存警告

drawrect 在非常大的 uiview 和内存不足

UIScrollView 中的 UIView 子类如何处理内存

little tips of painter.drawRect in Qt