不断更新NSImageView

时间:2012-08-21 19:37:00

标签: objective-c cocoa

我有NSImageView需要重新绘制不断更新的图片。 我有一个创建NSImage的模型对象,以及一个将此图像链接到NSImageView的控制器。

使用多线程,我可以轻松地让模型对象在后台线程中不断更新其输出图像。但是由于UI交互应该在主线程上完成,我无法在后台线程上设置NSImageView的图像。如果我更新主线程上的NSImageView,程序将无法响应

2 个答案:

答案 0 :(得分:1)

我讨厌自相矛盾,但为什么你认为更新主线程上的图像会使程序无响应?

如果计算下一个NSImage是瞬时的,那么从逻辑上讲,你应该只计算并显示最后一个,因为其间的任何一个都不会被察觉。

如果计算下一个花费一些时间,那么从主线程开始计算,然后将图像推送到主线程上的视图(例如,使用performSelectorOnMainThread:...)。主线程不会变得反应迟钝,因为它在你计算下一张图像以处理其他事件的过程中一直都是这样。

如果更新频率高于显示器的帧速率,那么您可以通过设置CVDisplayLink来更好地进行更新,并轮询更新图像的任何内容,以便在每个刻度线上获取最新的图像那个。

答案 1 :(得分:0)

不要在后台线程上更新NSimageView。它不是thread safe。你应该使用performSelectorOnMainThread:withObject:waitUntilDone: