iOS代理模式与事件模型对比实现
2015-07-11 16:17
471 查看
一般提到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方法
}
比如一个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方法
}
相关文章推荐
- sb错误
- 30多个iOS常用动画,带详细注释
- iOS中的设计模式简单说明
- iOS开发系列--并行开发其实很容易
- 【简易版】IOS仿periscope自制狂赞飘桃心
- ios后台播放
- iOS Loading图多张png图片组合动画效果
- iOS SDK详解之NSCalendar & NSDateComponents
- 如何成为一名有优秀的iOS工程师
- iOS3D转场动画
- iOS开发雷达动画效果实现
- ios开发 预处理.pch文件
- iOS--NSDictionary
- iOS字典转模型方法代理片段
- IOS WebView中JS和OC相互调用
- iOSpush过后返回多级界面
- IOS 给Button设置一个简单的动画
- iOS常见警告解决
- iOS 8 Xcode6 设置Launch Image 启动图片
- 关于友盟社会化分享框架的一些使用心得