采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
有一个比较复杂的绘制部分,是使用drawRect每次实时绘制相对更好,还是计算一次,生成一个imageView,然后每次渲染这张图即可,或者说,imageView的编解码渲染处理,和实时绘制到屏幕,哪个从成本或者性能上,更划算一些呢?
同学你好,我来解答一下您的这个问题,比如微博APP的场景下,每条微博卡片UI元素极其复杂,实际的业务场景是采用的实时绘制的,而这个实时绘制是发生在子线程当中的,最终由子线程将绘制结果也就是位图回传给主线程,在主线程当中设置对应UI控件Layer的contents属性。
相当于实际的业务场景是采用实时绘制的,但这个实时绘制是发生在子线程的,也就是课程当中讲的异步绘制。
我们假设采用您说的方案1,那么如果缓存每个控件的位图,会造成内存的大量消耗,而我们的TableViewCell又是高度复用的控件;另外,一般情况下数据变化会导致UI变化,这样缓存下来的位图,更没有太大的实际意义。
实际业务开发过程当中,都是需要经过平衡多方面的取舍提出最终的解决方案的,你能有不同方案的思考,是难能可贵的!
谢谢老师仔细的回答
老师,你的意思是如果cell的样式比较复杂,且样式是变化的,这种情况下cell复用是不好的选择对吗?
系统的UI控件当我们在某种时机下触发了setNeedsDisplay的话,就会重新进行drawRect:方法调用,每次绘制的结果可以理解为一张bitmap,并不是您说到的imageview。另外设置imageView的image,一般情况下是在主线程当中对图片进行解码操作,会占用一部分的主线程耗时。
老师,其实我还想了解下,加载一张图到屏幕上,到底发生了什么呢?
首先,感谢AndroidZhang同学的回答。可能我没说清楚导致你没有理解我想问的,但是我描述的场景是:一个复杂的绘制场景,我的方案1是:绘制一次,然后绘制成一张图,后面不去绘制了,每次加载这张图片;方案2是:
每次实时绘制。
登录后可查看更多问答,登录/注册
从BAT/TMD名企真题入手,结合源码及应用,构建完整iOS知识体系
1.3k 11
1.8k 9
1.2k 9
999 8
950 8