我尝试在iphone中学习UIView中的绘图过程。 据我所知,绘图过程只有在[UIView drawRect]方法存在的情况下才会存在。 它以[CALayer display]开头,并且在该方法中调用[UIView drawRect](确切地说:调用第一[UIView drawLayer:layer inContext:context]并从此方法中调用[UIView drawRect])。< / p>
我有两个问题:
答案 0 :(得分:2)
对于您的第一个问题,我宁愿说CALayer根据CGContextRef创建上下文,然后将其传递给作为其委托的视图。 关于你的第二个问题,就像我观察到的那样,似乎CALayers非常接近硬件和视频内存。实际上,如果将CGImageRef设置为CALayer的内容,则会直接在视频内存中将图像传递到屏幕上(这是一项耗时的操作)。所以我猜CALayer从它的CGContextRef(已被视图填充的那个)获得一种图像,然后将其作为其内容分配。或者,创建的上下文可能直接是视频内存中的空间,drawRect中的每个绘图操作都会触发对该内存的访问......
我不是这些过程的专家,我只能猜测我所见过的是什么。 请注意,我说“视频内存”,但我认为在iPhone上没有这样的东西,而是专用于视频操作的主内存的一部分。该部分已映射,您可以在Instruments中查看VMTracker的消耗情况。 再一次,我不确定,如果有人有更多的信息,我会很高兴听到它!