2013-07-17 17 views
2

我有通過JSON API加載某些東西的模型Model,然後我在UI莫名其妙地顯示出來。說有一個時間(基於時間服務器獲取)只有一個current實例,所以我有一個方法調用看起來像這樣[Model current]哪個是做異步的首選?代表團或塊?

的問題是,我需要做的事情時,數據加載,這使我兩個可能的解決方案:

  1. 代表團 - 像[Model currentWithDelegate:self]在那裏我會貫徹落實self,將有回調的協議
  2. 塊 - [Model currentWithSuccess:^(id response) { ... } error:^(NSError *error) { ... }]

因爲我是一個JavaScript/Ruby開發者,我很用來幹什麼2.,但考慮到代表團多久iOS上使用我在想這是否也是正確的方法?

什麼是事實上的標準或最佳實踐在iOS處理異步?有沒有更好的方法?

回答

2

我認爲既然你只做了兩件事情(報告成功或失敗),委託將是矯枉過正,如果你使用一個塊,它會提高可讀性,因爲你可以在閱讀代碼時輕鬆看到什麼是將在兩種情況下執行而不必搜索它。

這可能是有用的(重點煤礦):http://stablekernel.com/blog/blocks-or-delegation/

如果我看NSURLConnectionDelegate和NSURLConnectionDataDelegate,我看到說這樣的消息:「我開始做這個」,「這是我到目前爲止知道,「」我已經完成了這個,「或」親愛的上帝,世界即將結束,DEALLOC! dealloc的! DEALLOC!「這些信息概述了一個感興趣的代表希望在每一步都被告知的過程。

當我看到處理器和完井方法,我看到一個包含一個響應對象和錯誤對象塊。 沒有任何溝通「這裏是我到目前爲止,我還在工作。」

因此,我們可以說,委託回調更注重過程的塊就更結果面向。如果你需要沿着多步驟的過程的方式被告知,你可能會想使用委派。如果你只是想你請求(或約未能獲得詳細信息)的信息,你應該使用一個塊。 (如果你在這個名單結合這與第3項,你就會意識到,委託可以在所有這些事件,而多個獨立塊的維護狀態不能。)

1

兩者都是不同原因是有用的。如果你希望能夠提供您的回調代碼旁邊的對象分配

塊可以是有用的,當你只有一個或者兩個不同的回調。

委託是不錯的,當你想可能有不同的對象句柄的回調,或有一個對象的句柄回調其他各種對象(當然你仍然可以做到這一點有塊,但它更自然與委託模式)。代表是也好看因爲你有一個清楚定義的協議,有用的,如果你有許多不同的回調(其中的一些可能是需要的,其中一些可以是可選的),這將需要許多塊屬性。

一般來說,我傾向於使用塊的大部分時間在我自己的代碼,但如果你發現代表們更有意義的情況下,使用這些替代。