就我而言,在drawRect:
调用每个单曲后不会立即setNeedsDisplay
调用。例如,我认为以下代码与我的情况相同。
for (int i = 0; i < 100; ++i)
{
[self setNeedsDisplay];
}
就我而言,在drawRect:
调用每个单曲后不会立即setNeedsDisplay
调用。例如,我认为以下代码与我的情况相同。
for (int i = 0; i < 100; ++i)
{
[self setNeedsDisplay];
}
从文档中:
当您的视图的实际内容发生变化时,您有责任通知系统您的视图需要重绘。为此,您可以调用视图的 setNeedsDisplay 或 setNeedsDisplayInRect: 方法。这些方法让系统知道它应该在下一个绘图周期更新视图。因为它要等到下一个绘图周期才更新视图,所以可以在多个视图上调用这些方法同时更新它们。
drawRect:
只会在绘制下一帧时及时调用,这意味着您的整个循环将导致drawRect:
在下一次渲染迭代中仅被调用一次。这节省了不必要的计算,因为它避免了绘制永远不会显示在屏幕上的框架。它还允许您在代码中的不同位置进行多项更改,每次都通知视图需要刷新,而不会降低性能,因为调用setNeedsDisplay
只会告诉绘图系统下一帧需要重绘;它不会强制立即渲染可能永远不会显示在屏幕上的帧。
setNeedsDisplay
仅将视图标记为需要再次显示。实际的绘图调用在主线程的下一次运行循环迭代中完成,一次。这允许绘图系统进行一些优化并“组合”对setNeedsDisplay
.