代理模式

来源:互联网 发布:剑三冷艳毒姐捏脸数据 编辑:程序博客网 时间:2024/06/18 08:35
代理模式:当我们监听UIScrollView的滑动的时候,首先是将control中self写入到我们方法中,然后将当前类“遵守”(实现)我们协议,然后根据协议的要求,可以实现和不可以实现的方法,之后当我们的UIView做出相应的动作,我们的监听器就能监听到对应的方法,从而完成相应的动作,这就是我们的代理那转换成Android来理解就是:我们写了一个方法,然后方法的入参是一个接口,然后我们实现实现这个接口传入到方法中,这样我们就做到了,下面就是大概理解:当我们直接用接口的时候,没有这么搞,那怎么办,弄一个代理,代理代我们的对应的协议,它来执行协议的方法IOS的代理的写法:添加label到控制器的view的这段代码,控制器里面案例:当点击下载按钮的时候,应该通知控制器,控制器得知点击下载按钮,就执行下面的代码完成lable到控制器的输出反过来,控制器就必须去监听下载按钮的点击使用场合:当一个对象想知道另外一个对象发生了什么事情就用代理怎么写一个代理步骤:注释:对于IOS这一套第一次难以理解,但是用Android的那一套就恨简单了,就是我们说的回调,回调就是我们的代理,不同于回调这里是deleget而Android的借口就是ios的协议步骤1、首先写一个协议(先写一个接口)说明:1、协议的前面加上optional的关键字,可以不准许用于强制实现:@optional2、协议的名字就是我们对于的类的类名加上我们的代理名:CusViewDelegate3、位置:申明类中/** 声明一个协议 */@protocol CusViewDelegate <NSObject>@optional- (void) cusViewClickedDownLoad:(CusView *)customView;@end2、写一个代理说明:1、代码位置:实现类中2、id<CusViewDelegate> 这用id那么实现代理就是所有类,没有指定3、@property(nonatomic, weak)  声明的时候这里用weak4、deleget,这里用到方法名的时候就采用规范写代理的英文单词原理分析:这里当我们当实现了代理的时候,这里就自然就必须传入实现我们协议的类/** 写一个代理 */@property(nonatomic, weak) id<CusViewDelegate> deleget;3、运行当有了上面的架子后,还不能完成对应的方法,因此这里必须运行上面的方法说明:1、判断是否实现方法,当我们运行方法的时候判断对应的方法是否实现respondsToSelector2、/** *  下载的方法 */- (void)download : (UIButton *)btn{    //1、        //2、通知代理    //完成对应的方法(通知控制器添加lable到control上)    //重点:这里先判断有没有这个方法,不要动不动就直接点击运行方法,因为这个方法是可实现的,    if ([self.deleget respondsToSelector:@selector(cusViewClickedDownLoad)])    {        [self.deleget cusViewClickedDownLoad:self];    }    }4、对应的使用者用我们的代理说明:这里就完成了我们的回调CusView *cusView = [[CusView alloc] init];//将控制器设置称为我们的代理cusView.deleget = self;    @interface ViewController () <CusViewDelegate>/** 完成代理方法 */- (void)cusViewClickedDownLoad:(CusView *)cusView{    }

0 0
原创粉丝点击