如果我经常调用setneedsdisplay,那么调用drawrect的频率是多少?这是为什么?

Gao*_*Hsu 2 drawrect ios setneedsdisplay

在我的情况下,在drawRect:调用每个单元后不会立即setNeedsDisplay调用.例如,我认为以下代码与我的情况相同.

for (int i = 0; i < 100; ++i)
{
    [self setNeedsDisplay];
}
Run Code Online (Sandbox Code Playgroud)

Gre*_*reg 8

文档:

当视图的实际内容发生变化时,您有责任通知系统您的视图需要重新绘制.您可以通过调用视图的视图的setNeedsDisplay或setNeedsDisplayInRect:方法来完成此操作.这些方法让系统知道它应该在下一个绘图周期中更新视图.因为它会等到下一个绘图周期来更新视图,所以您可以在多个视图上调用这些方法来同时更新它们.

drawRect:只会及时调用下一帧的绘制,这意味着整个循环只会drawRect:在下一次渲染迭代时被调用一次.这节省了不必要的计算,因为它避免了绘制永远不会在屏幕上显示的帧.它还允许您在代码中的不同位置进行多项更改,每次都通知视图需要刷新而不会降低性能,因为调用setNeedsDisplay只会告诉绘图系统在下一帧中需要重绘; 它不会强制立即渲染可能永远不会在屏幕上显示的帧.