簡體   English   中英

iOS-操作隊列

[英]iOS - Operation Queues

有幾個相關的主題,但是我完成的所有搜索並沒有真正涵蓋我想做的事情。

我有一個具有兩種操作模式的API,即同步和異步。

在同步模式下,對API的調用必須在后台線程上,並且數據將返回給調用方,線程可能被阻塞直到操作完成。

在異步模式下,對API的調用可能在后台線程或主線程上,將委托傳遞給API方法,該方法立即返回,並在操作完成或失敗時調用Delegate。

所有這些都可以,但是我有一些現有的代碼,希望具有相同的API,並由Manager Class調用,該Manager Class根據上下文調用正確的基礎API,例如

調用API_A的AppLayer調用管理器類}這些API定義了相同的方法。

調用API_B的AppLayer呼叫管理器類

API_A是支持Sync / Async接口的現有API。 API_B是我想要創建的。


問題在於現有代碼使用NSOperationQueue / NSOperation來完成其任務,這在異步模式下可以正常工作。 使其適應調用Delegate方法很容易,但是我不確定如何實現同步模式?

基本上,我想將NSOperation添加到隊列中,然后等待其完成,然后返回結果。

任何想法或建議都將不勝感激,因為關於如何執行此操作似乎有很多相互矛盾的建議,而我無法找到如上所述的任何有效方法。

您的API指定其同步模式為...好吧,在與調用方不同的線程中調度,這似乎很奇怪。

至少這是您指定問題的方式。

使用相對簡單的NSOperation / NSOperationQueue系統可能無法做您想要的事情。 您是否研究過GCD,例如dispatch_once?

基本上,你不能說(用偽代碼)

var myval = start_thread_and_do_stuff(a, b, c)

委托方法的方式旨在通過線程進行通信。 由於在該示例中myval的分配將在不同的上下文中發生,因此無法進行分配。

我讀錯了你的問題嗎? 方法調用在哪個線程中發生? 背景還是主線程?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM