Delegate and Protocol

 
  1. 我們通過發送消息給對象出發特定動作;對象發送某些變化的時候通過回調函數(callback)通知我們。對象在特定事件發生的時候,就會調用對應的回調函數,觸發業務邏輯。
  2. 回調函數通過所謂的代理(Delegation)來實現.

委託(delegate)-------益處:

¨ 它更爲簡潔的把程序的邏輯處理從UIApplication中分離了出來。

¨ 它避免了程序員直接從UIApplication派生子類,試想如果通過從UIApplication派生子類的方法來管理應用程序的生命週期和系統事件是多麼痛苦的一件事情。


  “委託模式”中一般有兩個對象參與處理同一個請求,所謂的請求在iPhone中就是應用程序的生命週期和系統事件,接受請求的對象將請求委託給另一個對象來處理,同樣在iPhone中對應的是UIApplication在接收到生命週期和系統事件後委託給UIApplicationDelegate來處理。


  iPhone不採用繼承體系而採用委託模式來實現聚合的原因,其更深層次在於iPhone框架的多樣化使得繼承無法保證子類行爲的一致性,而委託模式恰恰是爲了彌補繼承的這個缺點誕生的。


  每個項目都會有一個UIApplication對象來處理應用程序的生命週期和系統事件,main()函數通過UIApplicationMain()來初始化應用程序的UIApplication,如果想對應用程序的UIApplication進行操作,就只能通過[UIApplication sharedApplication]來獲取到UIApplication的引用,這個方法會返回一個全局唯一的UIApplication對象給讀者。


  同樣,讀者可以通過如下代碼獲取應用程序的委託對象:UIApplicationDelegate* myDelegate = [[UIApplication sharedApplication] delegate];


協議 Protocol :

  object-c 裏沒有多繼承。那麼又要避免做出一個對象什麼都會(super class monster,huge ,super,waste)一個超能對象 本身是否定了面向對象的概念和真諦了。爲了讓代碼更簡潔,條理更清楚,可以將部分職責分離。

  協議本身沒有具體的實現。只規定了一些可以被其它類實現的接口。

  delegate 總是被定義爲 assign @property

  1. @interface UITextField
  2. @property (assign) id<UITextFieldDelegate> delegate;
  3. @end
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章