热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOS委托代理(delegate)入门

一、什么是委托      刚接触iOS开发的朋友肯定对委托这个东西感觉到陌生和迷惑,特别是Java转过来的(博主中枪),那么今天我们就简单的谈谈委托这个东西,atany会尽量做到说

一、什么是委托


       刚接触iOS开发的朋友肯定对委托这个东西感觉到陌生和迷惑,特别是Java转过来的(博主中枪),那么今天我们就简单的谈谈委托这个东西,atany会尽量做到说的浅显易懂的~



       首先让我们来看看委托的定义:委托delegate),就是某个对象指定另一个对象处理某些特定任务的设计模式。通俗来说,就是“某个对象”把要做的事情委托给“另一个对象”去做,简单吧。


       其中“某个对象”被称作委托者,“另一个对象”被称作是被委托者。


       【注】:委托者与被委托者的叫法很多,例如(普通对象与委托对象,委托与代理等等)为了方便大家理解,下文统一使用“委托与代理”的叫法。


       在委托与代理之间还有一个重要的概念——协议,协议是委托与代理之间的桥梁,把两者紧密联系在一起(关于协议的具体内容,本节不详细深入)。




二、委托与代理


如下图,委托方通过某种方式把任务分派出去给代理方处理,而两者之间的联系便是协议。



在程序中:一般情况下



1.委托需要做的工作有:


     1.1定义协议与方法


     1.2声明委托变量


     1.3设置代理


     1.4通过委托变量调用委托方法


 


2.代理需要做的工作有:


     2.1遵循协议 


     2.2实现委托方法



可能现在大家还不明白,我们设置如下场景,把每个工作都带入代码就清楚了


场景:Boss准备举行一场party,准备邀请Atany来参加party,但是Boss没空写email给Atany,于是他委托Henry与Mary来做这件事情。


1)   先看YGViewController.h(根控制器,程序第一个界面,类似于Boss)

[cpp] view

plain copy




  1. #import   


  2. @protocol InviteDelegate  


  3. -(void)inviteToMyParty:(NSString *)personName;//1.1定义协议与方法  


  4. @end  


  5.   


  6. @interface YGViewController : UIViewController  


  7. @property (assign,nonatomic) id delegate;//1.2声明委托变量  


  8. - (IBAction)ClickByMary:(id)sender;//委托给Mary  


  9. - (IBAction)ClickByHenry:(id)sender;//委托给Henry  


  10. @end  


在YGViewController.h中,委托执行了两件事情,分别是定义协议与声明委托。Boss并没有实现inviteToMyParty这个方法,他没有自己去邀请。



2)   再看YGViewController.m中ClickByMary与ClickByHenry点击事件


[cpp] view

plain copy




  1. - (IBAction)ClickByMary:(id)sender {  


  2.     Mary *mary = [[Mary alloc]init];  


  3.     self.delegate = mary;//1.3设置代理  


  4.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  


  5. }  


  6. - (IBAction)ClickByHenry:(id)sender {  


  7.     Henry *henry = [[Henry alloc]init];  


  8.     self.delegate = henry;//1.3设置代理  


  9.     [self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法  


  10. }  


两者大同小异,都是实例化对象,然后设置代理,最后调用方法。


BOSS可以选择不同的代理(Henry与Mary)来做这件事情(inviteToMyParty),而自己却不用做。


 


3)   以Henry为例子,我们看看Henry.h

[cpp] view

plain copy




  1. #import   


  2. #import "YGViewController.h"  


  3.   


  4. @interface Henry : UIViewController //2.1遵循协议  


  5. @end  


Henry遵循协议,随时准备好接收Boss的召唤。



4)   Henry.m中我们实现了inviteToMyParty的具体方法,我们弹出一个对话框来显示邀请内容。

[cpp] view

plain copy




  1. -(void)inviteToMyParty:(NSString *)personName{  


  2.     NSString *hello = [NSString stringWithFormat:@"Hello,%@",personName];  


  3.     NSString *str = [NSString stringWithFormat:@"Hey Boy,this is Henry,Come to our party Please!!"];  


  4.     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:hello message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];  


  5.     [alert show];  


  6. }  


按照上面步骤便完成一个简单的协议+委托的程序。


效果图:


             


             


            


           Over:有不懂或者错误的地方,欢迎指正。



推荐阅读
author-avatar
dtssv90623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有