我正在寻求一些关于使用的建议NSOperation
和绘图:
我有一个主线程创建我的NSOperation
子类,然后将其添加到NSOperationQueue
.
My NSOperation
做了一些繁重的处理,它的目的是在 main() 方法中循环几分钟,不断处理一些工作,但现在我只有一个 while() 循环,里面有一个 sleep(1) ,它被设置为绕过只需 5 次(用于测试)。
产生这个的主(原始)线程NSOperation
负责绘制视图并更新 UI。
我打算让 NSOperation 线程使用通知来告诉主线程它已经完成了一定量的处理,目前该通知在每次经过 while() 循环时发送一次(即每秒一次,因为它只是在睡觉(1))。主线程(视图)注册以接收这些通知。
通知立即到达主线程,并且看起来是异步的,看起来很好。看来两个线程都按预期运行......也就是说,同时运行。 (我使用 NSLog() 只是为了粗略地检查每个线程何时发送和接收通知)。
当视图收到通知并调用其处理程序方法时,我只需增加一个整数变量,然后尝试将其绘制到视图中(当然作为字符串)。在测试中,drawRect: 中的代码可以很好地将这个整数(作为字符串)绘制到屏幕上。
然而:这是我的问题(抱歉,花了一点时间才到达这里):当主线程(视图)收到来自 NSOperation 的通知时,它会更新此测试整数并调用 [self setNeedsDisplay]。然而,在 NSOperation 完成之前,视图不会重绘自身!我预计 NSOperation 作为一个单独的线程,无法阻止主线程的事件循环,但看起来这就是正在发生的情况。当 NSOperation 完成并且其 main() 返回时,视图最终会立即重新绘制自身。
也许我没有使用NSOperation
正确。我在“非并发”模式下使用它,但尽管有这个名称,我的理解是这仍然会产生一个新线程并允许异步处理。
非常感谢任何帮助或建议,如果您想查看一些代码,请告诉我。