2012-04-15 69 views
0

目標C發送的消息是不按異步回答我得到了Is sending a message in Objective C actually asynchronous?如何異步發送消息的目標C

所以我的下一個問題是如何真正目標C異步發送消息(同一應用程序內)是它甚至可能(不訴諸像線程這樣的複雜東西)?

+0

線程其實沒有那麼複雜!他們很好地防止阻止用戶界面。我建議你尋找一些'NSThread'代碼示例。你會愛上線程的力量! – v1Axvw 2012-04-15 19:43:41

+0

好吧,也許它並不複雜,但它對我的上下文需求來說太過分了:) – user310291 2012-04-15 20:32:07

+0

' - [NSObject performSelectorOnMainThread:withObject:waitUntilDone:]'將waitUntilDone標誌設爲'NO'可能是最簡單的方法 – v1Axvw 2012-04-15 20:45:31

回答

1

檢查文檔集中Apple的「併發編程指南」。您有諸如線程,操作隊列,調度隊列等選項。這是一個很大的課題。

+0

As我寫道,沒有線程。我想要一些簡單的傳統意義上的消息,有點像事件。 – user310291 2012-04-15 20:27:44

+0

然後不要使用它們;我指出的文件提供了很多選擇。 – 2012-04-16 00:49:48

1

如果您想使用Apple框架進行真正的異步方法調用,只需查看GCD,更確切地說就是dispatch_async

GCD可用於iOS和OSX,Apple知道接下來會發生什麼,因此使用此「asycn API」將確保您不太容易更新不兼容性。

良好的閱讀;)

編輯:好吧,如果你真的不想要任何線程,你可以宣佈你正在呼籲爲(oneway void)方法。我發現雖然覆蓋release

這裏有一個SO回答解釋它做什麼:https://stackoverflow.com/a/5495195/700317

希望這會有所幫助。

+0

與上述相同的說法。有趣但更復雜的是我的小需求:只是非阻塞的呼叫。 – user310291 2012-04-15 20:31:10

+0

好吧,對不起,我沒有得到無線程的東西,但是,真的,線程可以很簡單(如果使用正確的方式)。我更新了我的答案,希望它能解決您的問題。 – teriiehina 2012-04-16 14:52:06

1
+0

謝謝。但爲什麼異步應該與併發編程相關聯?我只是想要非阻塞呼叫。 – user310291 2012-04-15 20:30:32

+1

進行非阻塞調用的能力需要併發性(多個任務在相同或幾乎相同的時間執行)。 YOu可能只需要這些指南中的非常少量的信息,但他們將獲得所需的任何級別的併發性所需的信息。這聽起來像你只需要將你的調用打包到dispatch_async dispatch_async(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),{{0}} {{ – theMikeSwan 2012-04-15 21:42:10