您的位置:首页 > 移动开发 > Objective-C

Objective-C回调机制(delegate, protocol)

2015-01-06 17:44 423 查看


Objective-C回调机制(delegate, protocol)

 (2011-03-02 11:21:12)


转载▼

标签: 


it

分类: AboutIOS
      Objective-C是只支持单一继承的,当需要创建一个类能表现多个类的特性时,需要采用与Java中很类似的称为协议(Protocol)的方法。如同一个类a,一个类b,两个类签订一个协议p,该p协议规定一个方法c,c的实现在b中,当a需要调用实现c时,并不调用类b,而是声明一个id<p> delegate, 如同a掏出一份协议交给代理商,然后delegate会去找到b,让其完成c这件事。这样的调用更加干净,下面用一个例子具体说明一下:
      
     protocol用法:
            @interface ClassA :ClassB<protocol1, protocol2>
    
     首先先来一个一般情况下的例子,声明一个UIView类:
            @interface myView  :UIView{
            }
            @end
     之后再声明一个protocol,前缀为protocol,没有方法的实现(实现要交给别的类去完成):
           @protocol myViewDelegate
            -(void) Fun1;
            -(void) Fun2;
           @end;
     之后就是代理委托人拉,委托的声明方式如下,我们要在ClassB内使用Fun1方法,但是不需要做声明:
          @interface ClassB :UIViewController<myViewDelegate>
          @end
     
    ClassB实现:
          @implement ClassB
           -init{
                 MyView *view = [[MyView alloc]init];
                 view.delegate = self;
                 self.view = view;
           }
           -(void)Fun1{
           //dostuff,like change navigatorBar blablabla
           }
          @end

    那么怎么在ClassA中使用Fun1呢?需要在ClassA的声明中添加:
         @interface myView  :UIView{
           id<myViewDelegate> delegate;
   }
         @property ...
         @end

    具体实现中时:
         -doSth()
          {
           [delegate Fun1];
          }

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: