2010-09-08 96 views
6

我有NSOperationQueue與其中一些NSOperations(特別是NSInvocationOperations)。此操作會進行一些計算並相應地更改UI元素的狀態(當然,通過performSelectorOnMainThread:...),通常會使用動畫。暫停NSOperation

我的用戶界面有UINavigationViewController和一些按鈕導航到另一個視圖。所以用戶可以離開當前視圖,而計算/動畫仍在進行中。我需要的是以某種方式阻止它,直到用戶回到當前視圖。

我發現的唯一解決方案是創建一些線程安全的布爾標誌 - 並在所有線程中檢查它(類似於:while!flag sleep_for_some_time;)。有什麼更好的嗎?

回答

12

這個問題有點含糊,所以很難說不知道所有的代碼在使用。有了這個說法,我可以通過以下方式來解決問題:

選項1.在NSOperation的子類中,添加您自己的原子KVO屬性「isPaused」。在操作本身中,如果它發生變化,請觀察該屬性並進行相應處理。

選項2.您是否暫停過Operation Queue本身?如果是這樣,請考慮從您的操作中觀察該屬性,並且如果該值發生更改,則每個人都可以獨立採取措施。

選項3.取消隊列中的所有操作,如果視圖再次出現,只需重新啓動新操作即可。

總體而言,暫時沒有正在進行的操作沒有靈丹妙藥。你將不得不烘烤你自己的解決方案。儘管如此,傷害不應該太大。