“不再推荐CGLayer”;这是普遍共识吗?

Man*_*nny 5 cocoa cocoa-touch core-graphics cglayer ios

我写了一个 iOS 应用程序,我在其中使用CGLayer得非常成功。在研究如何从这个应用程序中榨取更多性能的方法时,我看到了这篇博客文章:http : //iosptl.com/posts/cglayer-no-longer-recommended/,其中作者非常广泛地指出CGLayer永远不会使用。单独的帖子并不值得关注,但我也发现有人将这篇帖子称为要遵守的东西。

没有提供真正的细节。例如,作者说“有时更快,有时更慢”。这让我怀疑是否担心程序员通常不会正确使用此对象。

我想这个问题是针对经验丰富的 Cocoa/Cocoa Touch 开发人员的。这有什么可取之处吗?是CGLayer确实的东西,以避免如果是这样,是否有具体的,可衡量的原因,为什么?

Aya*_*pta 3

首先我的回答是,我想得出的结论是,无论您是否CGLayer在应用程序中使用,这完全是您自己的设计决定。

真正的事情是,如果你在屏幕上画一些东西,它可能不会给你在 iOS 平台上买任何东西。在 iOS 上,基本的屏幕组成块是CALayer. CALayer使用 Quartz(CG) 图形上下文将其绘制在屏幕上,并且该上下文可能是其CGLayer自身创建的上下文。现在,CALayer由于硬件本身加速,将尝试将任何图形内容缓存到显卡并重用它们。这就是我们之前使用的目的CGLayer

另外,如果涉及离屏渲染,则CALayershouldRasterize设置为YES以及在某些其他情况下可以执行此操作。但是,请记住,离屏合成又是 CPU 在将渲染内容移交给 GPU 之前执行的另一项任务。所以同样没有明显的赢家。

CGLayer当创建不会在屏幕上绘制的 CG 上下文(例如 PDF 上下文)时会特别方便。

我不确定为什么苹果开发团队要求CGLayer完全避免。可能存在一些潜在的架构缺陷,但迄今为止尚未记录在案。然而,在我们确定这一点并且我们拥有基于CGLayer架构设计的现有应用程序之前,我没有找到任何具体的理由来完全放弃它。