setNeedsDisplay:NO是否有任何用处?

时间:2012-09-25 14:48:33

标签: objective-c cocoa nsview setneedsdisplay

在Cocoa中,当我们想要重绘视图时,我们会向视图发送一条setNeedsDisplay:消息,告诉视图使用参数YES重绘自身。我想知道是否有任何情况需要发送视图setNeedsDisplay:NO,例如多线程环境,以及发送视图setNeedsDisplay:YES,然后在setNeedsDisplay:NO后立即再次设置它会使视图重绘自己。如果没有理由打电话给setNeedsDisplay:NO,那么为什么要创建这样一个单调乏味的方法呢?他们可以改为实现像[view redrawView]

这样的方法

2 个答案:

答案 0 :(得分:1)

如果您要放弃之前调用的setNeedsDisplay:NO,可能会使用

setNeedsDisplay:YES。例如。有时将所有子视图标记为需要显示更容易,然后运行算法以取消其中一些子标记。

答案 1 :(得分:-2)

您可能知道,每次通过正常事件循环时,显示更新都是自动的(如果需要)。如果有必要,可以调用setNeedsDisplay:以强制显示更新。

来自NSView的文档:

  

<强>讨论
  每当用于绘制视图对象的数据或状态发生更改时,应该向视图发送setNeedsDisplay:消息。标记为需要显示的NSView对象会在每次通过应用程序的事件循环时自动重新显示。 (查看在事件循环到来之前需要重新显示的对象当然可以立即发送到适当的display ...方法。)

此函数的布尔参数仅指定所讨论视图的整个边界是否受影响,而不是某些属性“needsDisplay”设置为true或false。因此,setNeedsDisplay:确实非常像“redrawView”,只有附加参数。

修改

上述内容源自同一文档:

  

标志
  如果是,则将接收者的整个边界标记为需要显示;如果否,则将其标记为不需要显示。