
获得徽章 6
- 面试必考题
:为什么圆角和裁剪后iOS绘制会触发离屏渲染?
答:默认情况下每个视图都是完全独立绘制渲染的。而当某个父视图设置了圆角和裁剪并且又有子视图时,父视图只会对自身进行裁剪绘制和渲染。当子视图绘制时就要考虑被父视图裁剪部分的绘制渲染处理,因此需要反复递归回溯和拷贝父视图的渲染上下文和裁剪信息,再和子视图做合并处理,以便完成最终的裁剪效果。这样势必产生大量的时间和内存的开销。解决的方法是当父视图被裁剪和有圆角并且有子视图时,就单独的开辟一块绘制上下文,把自身和所有子视图的内容都统一绘制在这个上下文中,这样子视图也不需要再单独绘制了,所有裁剪都会统一处理。当父视图绘制完成时再将开辟的缓冲上下文拷贝到屏幕上下文中去。这个过程就是离屏渲染!!所以离屏渲染其实和我们先将内容绘制在位图内存上下文然后再统一拷贝到屏幕上下文中的双缓存技术是非常相似的。使用离屏渲染主要因为iOS内部的视图独立绘制技术所导致的一些缺陷而不得不才用的技术。展开评论20 - 维护了一个讲解面向对象设计的库: object-oriented-design
github.com。内容是面向对象设计原则和设计模式。目前只有面向对象设计原则的讲解,包括 Demo和 UML 类图。详细的讲解可以看在掘金的这篇博客:面向对象设计的六大设计原则(附 Demo 及 UML 类图)
juejin.im。后续还会有设计模式的讲解。
展开评论23