iOS代理模式与事件模型对比实现

一般提到delegate,都要设计到protocol,大概的意思就是一个对象委托另一个对象与其他对象进行交互。

比如一个Button按钮要响应一个单击事件,输出一段字符串。需要用代理方式处理:具体流程如下所示

 

 1)       首先创建一个事件源,也就是Button;

Create一个Button类,在Button.h文件中:

  @protocolButtonDelegate//----------(4,5)

   -(void)onClick; //----------(6)

  @end

  @interface Button:NSObject

  @property (nonatomic,strong)id<ButtonDelegate>delegate; //----------(3),(7)

  -(void)Click;//----------(2)

  @end

在Button.m文件中:

  @implementationButton

  -(void)Click{//----------(2)

    [_delegate onClick]; //----------(8)

  }

  @end

2)       Button有一个Click单击事件;

3)       然后给Button的单击事件,设置一个代理属性delegate,它的返回值任意id;

4)       这时就有个问题,是不是所有的对象都可以作为,单击事件的代理呢,显然不能,这是就用到了protocol;

凡是满足protocol协议的,或者说遵循protocol的对象都可以作为,Button单击事件的代理对象;

5)       现在就可以开始写protocol,既然是单击事件的代理,必须能够完成单击后的处理方法,

6)       所以定义的protocol里面要有一个用来处理单击事件的onClick方法;

7)       修改刚Button中定义的delegate的属性返回为遵循protocol的对象,即,

@property(nonatomic,strong)id<ButtonDelegate> delegate;

8)       然后再给出Button类Click方法的实现

               -(void)Click{

                   [_delegateonClick];

                }

9)       实现protocol代理类,在事件模型中体现为监听器Listener类的实现

Create监听类Listener,在Listener.h文件中:

@interface Listener:NSObject<ButtonDelegate>

@end

在Listener.m文件中:

@implementation Listener

-(void)onClick{

  NSLog(@”Button按钮得到触发”);

}

@end

10)     调用部分定义:

voidbuttonEvent(){

  Button *button=[Button alloc]init];//创建事件源

  Listener *listener=[Listener alloc]init];//创建监听器

  button.delegate=listener;//绑定监听器

  [button Click];//触发事件,调用Click方法

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值