概述
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
代理模式
1、原理:有些麻烦的不想自己亲自去做的事情,可以找个人帮忙,也就是交给代理对象去做。而且只要能够解决需求,任何人都可以。2、思路:
首先,我们当前对象得拥有代理对象属性。只有拥有了代理属性,才可能让代理去给我们做事情。
其次,我们清楚的知道我们的代理拥有哪些方法。只有我们的代理拥有能够解决我们需求的方法,我们才会选择该代理去为我们服务,这是我们对代理的唯一要求。
最后,能保证解耦。那么我们拥有的代理属性就应该是id类型的,代表任何对象,因为我们对代理的唯一要求就是代理拥有能够解决我们需求的方法,也就是说能够解决我们需求的任何对象都可以充当我们对象的代理。
3、实现方案
1>定义一个protocol,在其中声明一些和代理沟通的方法
2>拥有一个代理属性id delegate并让代理属性遵守protocol协议id<protocol> delegate
3>定义一个类来实现protocol中的方法。因为protocol当中只是方法的声明,相当于只有程序接口,而没有具体实现,我们要用到其中的方法就必须将protocol中的方法实现。
让我们定义的类遵守protocol协议,实现我们需要protocol的方法(没有必要完全实现)。因为我们要实现protocol当中的方法,就必须拥有protocol的方法,而也只要我们遵守了protocol,就会拥有其中的所有方法。
4、举例说明
模拟按钮Button的点击事件
1>实现Button监听器,其实就是代理
①定义protocol
//Button.h
@protocol ButtonDelegate <NSObjcet>
- (void)onClick:(Button *)btn;
@end
②定义一个Button的监听器delegate,这里类不需要遵守ButtonDelegate
@protocol ButtonDelegate;
@interface Button : NSObject
@property (nonatomic,retain) id<ButtonDelegate> delegate;
- (void)click;
@end
//Button.m
@impelementation Button
- (void)click
{
//如果按钮被点击,而且_delegate实现了onClick:方法
if([_delegate respondsToSelector:@selector(onClick:)])
{
[_delegate onClick:self];
}
}
@end
2>Button点击事件模拟
①Button监听器实现,这里的类需要遵守ButtonDelegate
//ButtonListener.h
@protoccol ButtonDelegate;
@interface ButtonListener : NSObject <ButtonDelegate>
@end
//ButtonListener.m
#import <Button.h>
@implementation ButtonListener
- (void)onClick:(Button *)btn
{
NSlog(@"按钮%@被点击了",btn);
}
@end
//模拟Button被点击
//main.m
1>初始化一个按钮
Button *button = [[Button alloc] init];
2>初始化一个按钮监听器
ButtonListener *listener = [[ButtonListener alloc] init];
3>设置按钮监听器
Button.delegate = listener;
4>点击按钮
[button click];
5>可以总结成四步
①protocol定义
②代理定义
③代理实现
④功能实现
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com
最后
以上就是懵懂荷花为你收集整理的黑马程序员-----Category,protocol和block(三)的全部内容,希望文章能够帮你解决黑马程序员-----Category,protocol和block(三)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复