我有一個窗口,顯示一些數據在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