本帖最后由 竹林风 于 2018-12-6 17:33 编辑
什么是委托
首先让我们来看看委托的定义:委托(delegate),就是某个对象指定另一个对象处理某些特定任务的设计模式。通俗来说,就是“某个对象”把要做的事情委托给“另一个对象”去做。其中“某个对象”被称作委托者,“另一个对象”被称作是被委托者。
【注】:委托者与被委托者的叫法很多,例如(普通对象与委托对象,委托与代理等等)为了方便大家理解,下文统一使用“委托与代理”的叫法。
在委托与代理之间还有一个重要的概念——协议,协议是委托与代理之间的桥梁,把两者紧密联系在一起。
委托与代理
在程序中:一般情况下
1.委托需要做的工作有:
- 1.定义协议与方法
- 2.声明委托变量
- 3.设置代理
- 4.通过委托变量调用委托方法
2.代理需要做的工作有:
可能现在看起来还是不是很明白,我们可以设置如下场景,把工作都带入到代码中就很容易理解了。
场景:Leader创建了一个论坛,准备邀请fan注册为会员,但是Leader没空写email给fan,于是他委托amy来做这个事情。 1.先看firstVC.h(程序的第一个页面,相当于Leader) [Objective-C] 纯文本查看 复制代码 #import <UIKit/UIKit.h>
@protocol InviteDelegate
-(void)inviteToRegistMyForum:(NSString *)personName; //定义协议与方法
@end
@interface firstVC : UIViewController
@property (nonatomic, assign) id<InviteDelegate> delegate;//声明委托变量
-(void)clickByAmy:(UIButton *)sender; //委托给Amy
@end
在firstVC.h中,委托执行了两件事情,分别是定义协议与声明委托。Leader并没有实现inviteToMyParty这个方法,他没有自己去邀请。 再看firstVC.m中clickByAmy点击事件: [Objective-C] 纯文本查看 复制代码 -(void)clickByAmy:(UIButton *)sender{
AmyVC * amy = [[AmyVC alloc]init];
amy.title = @"我是Amy";
self.delegate = amy;//设置代理
[self.delegate inviteToRegistMyForum:@"fan"];
[self.navigationController pushViewController:amy animated:YES];
}
Leader选择Amy来做这件事情(inviteToRegistMyForum),而自己却不用做。 接下来我们看看AmyVC.h [Objective-C] 纯文本查看 复制代码 #import <UIKit/UIKit.h>
#import "firstVC.h"
@interface AmyVC : UIViewController<InviteDelegate>
@end
AmyVC遵循协议,随时准备好接收Leader的召唤. AmyVC.m中我们实现了inviteToRegistMyForum的具体方法,我用了一个label来显示邀请内容。 这样我们就完成了一个简单的协议+委托的程序 执行效果:
附件:
Test-Delegate.zip
(157.39 KB, 下载次数: 0)
|