作者:dtssv90623 | 来源:互联网 | 2023-10-11 17:26
一、什么是委托 刚接触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
#import
@protocol InviteDelegate
-(void)inviteToMyParty:(NSString *)personName;//1.1定义协议与方法
@end
@interface YGViewController : UIViewController
@property (assign,nonatomic) id delegate;//1.2声明委托变量
- (IBAction)ClickByMary:(id)sender;//委托给Mary
- (IBAction)ClickByHenry:(id)sender;//委托给Henry
@end
在YGViewController.h中,委托执行了两件事情,分别是定义协议与声明委托。Boss并没有实现inviteToMyParty这个方法,他没有自己去邀请。
2) 再看YGViewController.m中ClickByMary与ClickByHenry点击事件
[cpp] view
plain copy
- (IBAction)ClickByMary:(id)sender {
Mary *mary = [[Mary alloc]init];
self.delegate = mary;//1.3设置代理
[self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法
}
- (IBAction)ClickByHenry:(id)sender {
Henry *henry = [[Henry alloc]init];
self.delegate = henry;//1.3设置代理
[self.delegate inviteToMyParty:@"atany"];//1.4通过委托变量调用委托方法
}
两者大同小异,都是实例化对象,然后设置代理,最后调用方法。
BOSS可以选择不同的代理(Henry与Mary)来做这件事情(inviteToMyParty),而自己却不用做。
3) 以Henry为例子,我们看看Henry.h
[cpp] view
plain copy
#import
#import "YGViewController.h"
@interface Henry : UIViewController //2.1遵循协议
@end
Henry遵循协议,随时准备好接收Boss的召唤。
4) Henry.m中我们实现了inviteToMyParty的具体方法,我们弹出一个对话框来显示邀请内容。
[cpp] view
plain copy
-(void)inviteToMyParty:(NSString *)personName{
NSString *hello = [NSString stringWithFormat:@"Hello,%@",personName];
NSString *str = [NSString stringWithFormat:@"Hey Boy,this is Henry,Come to our party Please!!"];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:hello message:str delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
}
按照上面步骤便完成一个简单的协议+委托的程序。
效果图:
Over:有不懂或者错误的地方,欢迎指正。