我有一个NSImageView,需要重新绘制一个不断更新的图像。我有一个创建NSImage的模型对象,以及一个将此图像链接到NSImageView的控制器。
使用多线程,我可以很容易地让模型对象在后台线程中连续更新其输出图像。但是由于UI交互应该在主线程上完成,所以我不能在后台线程上设置NSImageView的图像。如果我更新主线程上的NSImageView,程序将变得无响应
发布于 2012-08-22 03:46:45
我不想自相矛盾,但是为什么你认为更新主线程上的图像会使程序没有响应?
如果计算下一个NSImage是瞬间的,那么从逻辑上讲,你应该只计算并显示最后一个,因为介于两者之间的任何一个都不会被感知到。
如果计算下一个需要花费一些时间,那么在主线程上执行计算,然后将图像推送到主线程上的视图中(例如,使用performSelectorOnMainThread:...)。主线程不会变得无响应,因为在您计算下一个图像以处理其他事件时,它有足够的时间。
如果更新比显示的帧速率更频繁,那么你可以通过设置一个CVDisplayLink并轮询正在更新图像的任何内容来获得最新的图像,从而获得最新的图像。
发布于 2012-08-22 14:57:58
不要在后台线程上更新NSimageView。它不是thread safe。您应该使用performSelectorOnMainThread:withObject:waitUntilDone:
https://stackoverflow.com/questions/12061832
复制相似问题