2016-02-26 72 views
-1

我需要編寫一個方法來完成一些異步的東西(HTTP GET請求),並在完成時調用一些以回調形式提供的方法。有關使用回調創建方法的最佳做法

在Objective-C中做這些事情的適當方法是什麼?我是否應該爲成功和錯誤處理提供一個完成回調,還是應該將它們作爲單獨的參數傳遞?

另外,我應該如何命名這種方法?這裏的最佳實踐是什麼?

+0

這是一個很好的話題,但可能對[programmers.se]更好。 – rickster

回答

0

這取決於你的喜好。我的首選是有一個回調。在這一點上,我會檢查錯誤。如果沒有錯誤存在,那麼我會認爲響應是成功的,然後開始相關處理。

+0

所以這種情況下沒有一般的做法? – FrozenHeart

2

設置委託並在異步過程完成時在委託中調用完成方法是一種方法。

在過去的幾年中,蘋果和更大的iOS/Mac社區一直在擺脫這種設計模式。相反,你更有可能找到一個採用完成塊的方法。該完成塊可能具有成功參數,數據參數和錯誤參數。

查看現在不推薦使用的NSURLConnection類中的sendAsynchronousRequest:queue:completionHandler:方法或NSURLSession中最近使用的dataTaskWithURL:completionHandler:方法。兩者都有一個完成處理程序,當異步請求完成處理時會被調用。

我改變了我的習慣,更有可能在新設計中使用完成塊而不是代理和回調。

+0

我不認爲這是任何人都從協議委託模式轉移的情況。這完全取決於兩個物體之間的關係。一如既往,爲工作使用正確的工具。 – nhgrif

+0

通常您可以使用任一種方法。在塊存在之前,你(顯然)不能使用它們。現在,它們是一種選擇,在可以使用的情況下,塊有一些優點。當然,仍然有代理模式是更好的解決方案的情況。 –