我希望我的Mac cocoa应用程序能够不断更新View,即使它已经回归了吗?活动监视器或DigitalColor Meter之类的东西。
我如何实现这种行为?
谢谢!
编辑:我从NSGraphicContext获取上下文,然后创建一个线程来完成后台工作。
- (void)drawRect:(NSRect)dirtyRect
{
context = (CGContextRef)[[NSGraphicsContext currentContext] graphicsPort];
[NSThread detachNewThreadSelector: @selector(ExecuteDrawingInBackGround:) toTarget: self withObject: nil];
}
答案 0 :(得分:3)
您无法使用后台线程中的Mac UI API,因为它不是线程安全的。
通过让后台线程(如果有的话)通知主线程某些内容已经发生变化并需要重新绘制来重新绘制自己的程序。这是最简单的方法,让后台线程将-performSelector:OnMainThreadWithObject:waitUntilDone:发送到某个对象,通常是文档或视图控制器。
或者,您也可以使用NSTimer定期触发并完全避免后台线程。