是 - [NSView setsNeedsDisplay:]一个同步调用?

Dav*_*man 1 cocoa objective-c nsview

我有NSView一个Mac OS X应用程序自我绘制.当我准备好发生这种情况时,我通过电话请求它:

[self.imageRenderedView setNeedsDisplay:YES];
Run Code Online (Sandbox Code Playgroud)

我的问题是,这个呼叫阻止了吗?也就是说,它是同步的吗?我可以假设在后续语句执行时已经发生了绘图吗?这个假设似乎对我有用,但我觉得它有点不安全.

Mar*_*n R 8

该setNeedsDisplay:调用仅通过在视图对象中设置标志来将视图标记为需要显示.因此,返回速度非常快,但是图纸已经没有当该方法返回没有发生过.

从文档:

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

  • @DavidElliman:来自"查看编程指南:":通常,您应该避免调用显示系列方法来重绘视图.如果你必须打电话给他们,不经常这样做.因为它们会立即调用drawRect:例程,所以它们可以通过抢占其他挂起操作来显着降低性能.它们还排除了合并其他更改的能力,然后一次重绘这些更改. (3认同)