国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 18:05:58
字體:
來源:轉載
供稿:網友

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

 

   原文:http://m.survivalescaperooms.com/A--G/p/4900241.html   轉載請注明

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

  故名思議,delegate就是代理的含義, 一件事情自己不方便做,然后交給其他人去幫助實現, 比如A、B兩個類,A的一個對象有一個任務aTask要在B類中實現,任務無法在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

 

  B用一個事件,比如按鈕點擊,在點擊方法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");
      }


  }


  //在代理方法里實現A所交代的任務
  -(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


    


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 桐庐县| 承德市| 太白县| 甘南县| 琼结县| 阿克苏市| 竹山县| 兴城市| 土默特右旗| 无极县| 简阳市| 河曲县| 佛山市| 太谷县| 都昌县| 清河县| 旅游| 句容市| 天等县| 卢龙县| 云龙县| 阿拉善盟| 五原县| 楚雄市| 田阳县| 南川市| 盱眙县| 金塔县| 莒南县| 虎林市| 略阳县| 黎川县| 沂源县| 延川县| 略阳县| 阜城县| 安龙县| 图木舒克市| 义乌市| 台中市| 石门县|