2012-11-16 22 views
8

可能重複:
Do code blocks completely replace delegates?塊VS代表

我正好遇到從一個論壇,以下聲明:

「代表的是過去塊是未來「。

1)是否優先方式對代表做「委託」職責?
2)使用委託與塊是否有什麼特別的好處?

+1

除非我失去了一些新的東西,它們是兩個完全不同的東西,是不是其他的替代品... – Krease

+3

@克里斯:這兩種方法可用於回調。所以有替代空間 – vikingosegundo

+5

«所以,作爲一個經驗法則,當需要進行通信時,委託協議是正確的,導致通信的行爲是瀰漫性的或者行爲是從第三方來源發出的。塊主要與異步操作和單次類相關聯。»http:// stackoverflow。com/questions/4584404/do-code-blocks-completely-replace-delegates/9035610#9035610 – vikingosegundo

回答

25

我認爲在代表做什麼和做什麼塊時會有輕微的誤解。

在Objective-C,有三種方法來處理回調:

  1. 代表團 - >在這裏你做出一個對象委託另一個對象的,你必須指定哪些種類由生成的事件委託對象將響應的「父」對象。

  2. Target-Action - >在UI交互中典型,其中UI子視圖(按鈕,滑塊等)基於由預定義事件處理程序處理的某些用戶輸入(例如觸摸/輕敲)生成事件(通常是開發人員指定的一些Objective-C方法)。

  3. 通知 - >對象向自己註冊一個實例NSNotificationCenter以「偵聽」任何類型的事件並響應一個或多個事件。

塊是不是需要自己來處理委託的方式,或其他任何回調。

它們是可以訪問調用方法的局部變量和參數的獨立代碼段。它們可以用來在一堆不同的環境中定義行爲。一個塊的主要優點(就像我所看到的),它可以通過消除會混淆代碼庫的多餘特定方法來簡化代碼。塊有助於將代碼本地化到最有意義的位置:在回調機制中。

基本上,使用它們增強了可讀性,使代碼更易於維護。

無論這些優點使區塊的處理回調的「首選」的方法絕對是個人的看法和經驗的問題。 ;)