2012-08-10 116 views
0

如果應用程序異步執行代碼塊並在回調中通知完成狀態,請執行這些操作是否在主線程(回調)上執行?通過異步回調觸發

在此回調中處理Core Graphics繪圖和文件操作的正確方法是什麼?

我目前有這些指令在回調中運行,但是想要觸發一個線程來處理這些指令。

回答

0

如果您正在做任何UI繪圖,那必須在主線程上。如果您現在正在使用這些異步模塊(表面上併發調度隊列),那麼爲什麼不只是在那裏完成所有的工作,並且當您有完成的產品要顯示時,只能在主模塊上回傳消息。如果你的回調調用你的類中的其他方法,處理併發的最安全的方法是定義助手對象 - 小對象,它需要一些輸入和產品輸出。

創建幫助程序,附加所需的任何數據,在隊列中的塊中啓動它,並在完成時將消息提交到提取完成產品的主線程中,呈現它,然後刪除輔助對象。

+0

異步完成的代碼是在私有庫完成之前的一個步驟。 – jarryd 2012-08-10 17:44:54

+0

那麼你的問題到底是什麼?您在某個線程上返回的私有庫文件消息,可能是任何線程。你現在想要更新你的用戶界面 - 所以你可以測試你得到的線程「[NSThread isMainThread」,如果是的話就更新一下,或者如果沒有在主線程上調度主線程上的塊來做工作。 – 2012-08-10 19:50:16

0

我沒有很多Core Graphics的經驗,但是我在塊上做了很多工作。我認爲,如果你的應用程序異步執行一個代碼塊(在一個新的線程上),那麼這是在主線程上進行回調或通知的一個好習慣。