1. 程式人生 > >iOS 委託代理(delegate)入門

iOS 委託代理(delegate)入門

       剛接觸iOS開發的朋友肯定對委託這個東西感覺到陌生和迷惑,特別是Java轉過來的(博主中槍),那麼今天我們就簡單的談談委託這個東西,atany會盡量做到說的淺顯易懂的大笑~

       首先讓我們來看看委託的定義:委託delegate),就是某個物件指定另一個物件處理某些特定任務的設計模式。通俗來說,就是“某個物件”把要做的事情委託給“另一個物件”去做,簡單吧。

       其中“某個物件”被稱作委託者,“另一個物件”被稱作是被委託者。

       【注】:委託者與被委託者的叫法很多,例如(普通物件與委託物件,委託與代理等等)為了方便大家理解,下文統一使用“委託與代理”的叫法。

       在委託與代理之間還有一個重要的概念——協議,協議是委託與代理之間的橋樑,把兩者緊密聯絡在一起(關於協議的具體內容,本節不詳細深入)。

二、委託與代理

如下圖,委託方通過某種方式把任務分派出去給代理方處理,而兩者之間的聯絡便是協議。



在程式中:一般情況下

1.委託需要做的工作有:

     1.1定義協議與方法

     1.2宣告委託變數

     1.3設定代理

     1.4通過委託變數呼叫委託方法

2.代理需要做的工作有:

     2.1遵循協議 

     2.2實現委託方法

可能現在大家還不明白,我們設定如下場景,把每個工作都帶入程式碼就清楚了

場景:Boss準備舉行一場party,準備邀請Atany來參加party,但是Boss沒空寫email給Atany,於是他委託Henry與Mary來做這件事情。

1)   先看YGViewController.h(根控制器,程式第一個介面,類似於Boss)

  1. #import <UIKit/UIKit.h>
  2. @protocol InviteDelegate  
  3. -(void)inviteToMyParty:(NSString *)personName;//1.1定義協議與方法
  4. @end  
  5. @interface YGViewController : UIViewController  
  6. @property (assign,nonatomic) id<InviteDelegate> delegate;//1.2宣告委託變數
  7. - (IBAction)ClickByMary:(id)sender;//委託給Mary
  8. - (IBAction)ClickByHenry:(id)sender;//委託給Henry
  9. @end  

在YGViewController.h中,委託執行了兩件事情,分別是定義協議與宣告委託。Boss並沒有實現inviteToMyParty這個方法,他沒有自己去邀請。

2)   再看YGViewController.m中ClickByMary與ClickByHenry點選事件

  1. - (IBAction)ClickByMary:(id)sender {  
  2.     Mary *mary = [[Mary alloc]init];  
  3.     self.delegate = mary;//1.3設定代理
  4.     [self.delegate inviteToMyParty:@"atany"];//1.4通過委託變數呼叫委託方法
  5. }  
  6. - (IBAction)ClickByHenry:(id)sender {  
  7.     Henry *henry = [[Henry alloc]init];  
  8.     self.delegate = henry;//1.3設定代理
  9.     [self.delegate inviteToMyParty:@"atany"];//1.4通過委託變數呼叫委託方法
  10. }  

兩者大同小異,都是例項化物件,然後設定代理,最後呼叫方法。

BOSS可以選擇不同的代理(Henry與Mary)來做這件事情(inviteToMyParty),而自己卻不用做。

3)   以Henry為例子,我們看看Henry.h

  1. #import <UIKit/UIKit.h>
  2. #import "YGViewController.h"
  3. @interface Henry : UIViewController <InviteDelegate>//2.1遵循協議
  4. @end  

Henry遵循協議,隨時準備好接收Boss的召喚。

4)   Henry.m中我們實現了inviteToMyParty的具體方法,我們彈出一個對話方塊來顯示邀請內容。

  1. -(void)inviteToMyParty:(NSString *)personName{  
  2.     NSString *hello = [NSString stringWithFormat:@"Hello,%@",personName];  
  3.     NSString *str = [NSString stringWithFormat:@"Hey Boy,this is Henry,Come to our party Please!!"];  
  4.     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:hello message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  
  5.     [alert show];  
  6. }  

按照上面步驟便完成一個簡單的協議+委託的程式。

效果圖:

             

             

            

           Over:有不懂或者錯誤的地方,歡迎指正。