MZN對iOS 的一點理解(一)—— 關於代理delegate的個人理解,mzndelegate

來源:互聯網
上載者:User

MZN對iOS 的一點理解(一)—— 關於代理delegate的個人理解,mzndelegate

   做了一年的iOS,想記錄自己對知識點的一點理解。

 

   原文:http://www.cnblogs.com/A--G/p/4900241.html   轉載請註明

  第一篇,想記錄一下iOS中delegate(委託,也有人稱作代理)的理解吧

  故名思議,delegate就是代理的含義, 一件事情自己不方便做,然後交給其他人去協助實現, 比如A、B兩個類,A的一個對象有一個任務aTask要在B類中實現,因為a事件雖然是A類觸發的,但是無法在A類本身中實現,所以要交給B類幫忙,則A和B約定一個協議:

A類中:

  @protocol ADelegate <NSObject>  
   -(void)aTask;

  @end

  //代理屬性,同時約定作為代理的對象必須實現ADelegate協議

  @property (nonatomic,retain) id<ADelegate> aDelegate;

 

B類中:

  而B類中,B類繼承A的代理,表示同意該協議,以後我們就按說好的辦事了:

  //繼承A的代理協議

  @interface B () <ADelegate>

  @end

 

  A用一個事件,比如按鈕點擊,在點擊方法onBButtonClicked裡觸發任務:
//按鈕點擊
-(void)onBButtonClicked{
    //在B類中,初始化一個A類的對象aObj = [[A alloc] init];
    AViewController *aObj = [[AViewController alloc] init];

 //指定A類的代理,這事就交給aObj你去做了。
    aObj.aDelegate  = self;
    
    //判斷_aDelegate執行個體是否實現了aTask方法

  //避免未實現aDelegate的類也作為A的監聽
    if([A.aDelegate respondsToSelector:@selector(aTask)]){
        //_viewDelegate對象調用代理方法觸發任務
        [A.aDelegate aTask];
        
        NSLog(@"excute A`s aTask");
    }
   
    
}
//在代理方法裡實現B的任務
-(void)aTask{

 //具體任務內容
    NSLog(@"aTask is execute.");
    
}

 

小demo 連結: DelegateDemo.zip

補充: 1.在協議@Protocol裡,有些方法不一定都需要實現,可以根據需求添加一些關鍵字來標記方法的重要性,比如

    @required //必須實現的方法    @optional //可選實現的方法
     2.協議可以擴充自另一個協議,aDelegate就擴充自NSObject;
   3.協議中不能定義屬性、成員變數等,只能定義方法;


引論:
   事實上在ObjC中協議的更多作用是用於約束一個類必須實現某些方法,而從物件導向的角度而言這個類跟介面並不一定存在某種自然關係,
可能是兩個完全不同 意義上的事物,這種模式我們稱之為代理模式(Delegation)。在Cocoa架構中大量採用這種模式實現資料和UI的分離,
而且基本上所有的協議都 是以Delegate結尾。
參考連結: http://blog.csdn.net/jianxin160/article/details/47753189


    

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.