<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ios----protocol, optional ,delegate

      ios----protocol,delegate

       
       
      
      
      protocol——協議
      
      協議是用來定義對象的屬性,行為和用于回調的。
      協議中有兩個關鍵字@private和@optional,@private表示使用這個協議必須要寫的方法,@optional表示可選的方法,用不到可以不寫。
      就像UITableView,它有兩個協議:UITableViewDelegate和UITableViewDataSource,UITableViewDelegate是規定行為操作的,里面的方法都是可選的方 法,UITableViewDataSource是規定數據存儲結構的,有兩個必選方法。因此你再實現UITableViewDataSource時必須要定義這兩個方法,否則程序會出錯。
      如果你使用了響應的類或者控件,如果該類定義了協議,就可以根據需要實現該協議。
      
      protocol和java里interface的概念類似,是Objective-C語法的一部分。
      定義protocol如下
      
      [cpp] view plaincopyprint?
      
      1
      2
      3
      4
      5
      6
      @protocol ClassADelegate  
      
      - (void)methodA;  
      - (void)methodB;  
      
      @end  
      那么就是定義了一組函數,這組函數放在一起叫作一個protocol,也就是協議。
      
      函數是需要被實現的,所以如果對于class如下
      [cpp] view plaincopyprint?
      
      
      @interface ClassB <ClassADelegate> {  
      }  
      @end  
      就叫作ClassB conform to protocol ClassADelegate,也就是說ClassB實現了這個協議,
      也就是實現了這一組函數。
      
      有了上面這個頭文件,我們就可以放心作調用
      [cpp] view plaincopyprint?
      
      
      ClassB *b = [[ClassB alloc] init];  
      [b methodA];  
      [b methodB];  
      而不用擔心出現unrecognized selector sent to instance這種錯誤了。
      
      所以protocol就是一組函數定義,是從類聲明中剝離出來的一組定義。
      [cpp] view plaincopyprint?
      
      
      id<ClassADelegate> b = ...;  
      [b methodA];  
      這種用法也常見,b是一個id類型,它知道ClassADelegate這組函數的實現。
      
      delegate——委托,代理
      
      適用場合:
      
      類A調用類B, 當類B想回調類A的方法的時候, 要用到delegate
      
      要理解下面的代碼的話, 要知道的一個知識點是 協議(protocal)
      
      文件:ClassA.h
      
      
      #import <Foundation/Foundation.h>
      #import "ClassB.h"
      @interface ClassA : NSObject<SampleProtocal>
      - (void)test;
      @end
      文件:ClassA.m
      
       
      #import "ClassA.h"
      @implementation ClassA
      
      
      -(void)test{
          ClassB *classB = [[ClassB alloc] init];
          classB.delegate = self;
      
          [classB actionOfClassB];
      }
      
      
      -(void)callback{
          NSLog(@"這個方法會被類B調用");
      }
      @end
      文件:ClassB.h
      
      
      #import <Foundation/Foundation.h>
      
      @protocol SampleProtocal <NSObject>
      @required
      - (void)callback;
      @end
      
      
      @interface ClassB : NSObject{
          id<SampleProtocal> delegate;
      }
      @property (nonatomic, retain) id<SampleProtocal> delegate;
      
      
      - (void)actionOfClassB;
      
      
      @end
      文件:ClassB.m
      
      
      #import "ClassB.h"
      
      
      @implementation ClassB
      @synthesize delegate;
      -(void)actionOfClassB{
          [delegate callback];
      }
      @end
      摘自:http://blog.csdn.net/mars2639/article/details/7310182


      摘自:
      http://blog.csdn.net/mars2639/article/details/7310182

      posted on 2014-02-09 18:06  ACM_Someone like you  閱讀(991)  評論(0)    收藏  舉報

      導航

      主站蜘蛛池模板: 成人3d动漫一区二区三区| AV最新高清无码专区| 欧美喷潮最猛视频| 亚洲夜夜欢一区二区三区| 久久久久久毛片免费播放 | 四虎永久免费很黄的视频| 国内精品久久人妻无码妲| 国产真实交换配乱婬95视频| 在线看无码的免费网站| 国产精品久久国产精麻豆99网站| 超碰成人精品一区二区三| 欧美巨大巨粗黑人性aaaaaa| 日本三级理论久久人妻电影| 偷窥盗摄国产在线视频| 亚洲综合欧美在线…| 性虎精品无码AV导航| 成人免费A级毛片无码片2022| 91精品国产自产91精品| 麻豆人人妻人人妻人人片av| 亚洲欧美激情另类| 久久人人爽人人人人爽av| 久久一日本道色综合久久| 国产亚洲精品AA片在线爽| 夜鲁鲁鲁夜夜综合视频欧美| 国产精品偷伦费观看一次| 家庭乱码伦区中文字幕在线| jlzz大jlzz大全免费| 久久夜色精品国产亚av| 丁香花成人电影| 蜜桃一区二区三区免费看| 国产普通话对白刺激| 西畴县| 国产成人综合色视频精品| 成人免费无遮挡无码黄漫视频| 无码伊人久久大杳蕉中文无码| 国产原创自拍三级在线观看| 国产中文三级全黄| 综合成人亚洲网友偷自拍| 久久月本道色综合久久| 亚洲国产精品午夜福利| 亚洲自拍偷拍中文字幕色|