我有一个窗口,显示一些数据在NSTableView
。这些数据在后台加载。数据加载线程在windowDidLoad:
方法中启动。如果窗口在加载完成前关闭,后台线程应该被取消。我通过发信号通知windowWillClose:
委托方法中的线程并等待后台线程完成。可取消加载后台线程
现在,这一切都完美的作品。但我有一个问题:如何更新表视图中的数据?我尝试通过performSelectorOnMainThread:
尝试呼叫reloadData
,但这会导致竞争条件:reloadData
调用有时在窗口关闭命令之后在主线程上排队,并且在窗口关闭后执行,并且所有事情都以火焰进行。
什么是控制和沟通后台线程的最佳方式?
这是一个好主意,我会试试这个。但是我不能使用'viewDidUnload',因为它只能在iOS上使用,而在Cocoa中,窗口不是视图。我不认为我需要保留控制器,因为'performSelector'方法仍然保留目标。你能详细说明你的意思是“异步调用和委托类”吗?我不确定我是否明白这一点。 – 2011-05-26 20:06:00
我尝试过了,现在看起来可行。如果线程编程只是不那么难... – 2011-05-26 20:51:33
Jakob,看我的编辑..你会喜欢异步I/O,它是如此自然的事件循环系统... – sergio 2011-05-26 21:42:36