不,我不是菜鸟.
为什么-drawRect对于UItableVIEw性能比具有多个视图更快?
我知道合成 *** 作发生在GPU上.但合成是一次性的 *** 作;一旦层被提交到内存,它与缓存的缓冲区没有区别,从GPU的角度来看,它被转换为视图内外.将此与在drawRect中使用Core Graphics进行比较,后者在cpu上使用未知数量的 *** 作来生成最终在CALayers中缓存的像素.如果它最终都缓存和扁平化有什么区别?
此外,如果您正确处理单元重用,则不需要在每次调用-cellForRowAtIndexPath时重新生成视图.实际上,使用UIVIEw / CALayer对象缓存的状态数据(字体,字体大小,文本颜色,属性等)比在-drawRect期间不断重新创建它们可能有性能优势.
为什么drawRect的热潮?有人可以给我指点吗?
解决方法 在谈论优化时,您需要提供具体的情况和条件以及限制.因为优化是关于微观管理的.否则,它毫无意义.你的速度更快的基础是什么?你是怎么测量的?数字是多少?
例如,no-op或非常简单-drawRect:可以更快,但并不意味着它总是这样.
我也不知道CA的内部设计.所以这是我的猜测.
如果是静态内容
你的绘图代码被不断调用很奇怪.因为CALayer会缓存绘图结果,并且在您发送setNeedsdisplay消息之前不会再次绘制它.如果不更新单元格的内容,则它与单个位图图层相同.应该比多个合成图层更快,因为它不需要合成成本.如果您只使用足够小的单元格同时存在于池中,则不需要更新.随着RAM在最近的模型中变得越来越大,它更有可能在最近的模型中发生.
如果是动态内容
如果它不断更新,则意味着您实际上是在自己更新它们.因此,您的图层合成版本也可能会不断更新.这意味着每个帧都会再次合成.它可能会因为复杂而庞大而变慢.如果它复杂而且很大并且有很多重叠区域,那么它可能会更慢.如果无法确定哪些区域可以忽略,我猜CA会严格绘制所有内容.不像你可以选择画什么.
如果实际绘图是在cpu中完成的
即使您将视图配置为多层的纯组合,也应最终绘制每个子图层.并且不保证在GPU中绘制他们的内容.例如,我相信CATextLayer正在cpu中绘制自己. (因为在当前移动GPU上绘制带有多边形的文本在性能方面没有意义)和一些过滤效果也是如此.在这种情况下,总体成本会相似,而且需要合成成本.
在cpu和GPU均衡负载的情况下
如果您的GPU非常繁忙,因为有太多层或直接OpenGL绘图,您的cpu可能处于空闲状态.如果您的CG绘图可以在空闲cpu时间内完成,那么它可能比为GPU提供更多负载更快.
他们都不是你的情况?
如果您的情况不是我上面列出的情况,我真的想看到并检查CG代码比CA组合绘制更快.我希望你附上一些源代码.
总结以上是内存溢出为你收集整理的ios – 为什么-drawRect比为UITableViews使用CALayers / UIViews更快?全部内容,希望文章能够帮你解决ios – 为什么-drawRect比为UITableViews使用CALayers / UIViews更快?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)