IOS 委托和协议区别和联系 (-)

来源:互联网 发布:非农数据看过你 编辑:程序博客网 时间:2024/06/05 05:54

IOS 委托和协议区别和联系 (-)

发表于2年前(2013-08-07 20:22)   阅读(1391) | 评论(0) 7人收藏此文章, 我要收藏
0

7月18日 杭州 OSC 源创会 —— 开源的 Swift 2.0

IOS上的协议类似于C#、Java上面的接口,他是从类中抽出来的一系列方法,但方法的实现是在实现这个协议的类中,任何实现这个协议的类都需要实现协议类中的@require方法;

委托是一种设计模式,是一种设计思想。

但是在IOS上面委托经常依托协议来实现(但并不是必须的)。一个很好的例子就是老板和秘书:老板要经营企业需要对新员工培训、对公司管理、打电话、发薪水等工作,但是对应老板来说一些事情例如打电话、发薪水的工作可以通过秘书来做,老板自己只负责对员工培训、公司管理,别的事情委托给秘书来做。委托思想就是在这种类似情况下产生的。

再说一下为什么IOS上面的委托经常依赖协议来实现?就像老板需要一个会打电话、发薪水的秘书来减轻老板自己的工作,但是老板并不知道谁有这两项技能,那老板就会发一个招聘,招聘会这两项技能的人。但老板怎样知道应聘人员会这两项技能那,老板会通过你的学历和工作经验判断应聘人员是否会这两项技能;但是对于程序来说,在不知道这个类的内部情况下怎样知道这个类是不是可以委托,评判标准是啥?这个时候如果一个类实现一个有这两项技能的协议,则能很容易判断出这个类具有这两项技能。这个就是IOS上面为什么委托经常和协议一块用。

例子待续...

协议

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#import <Foundation/Foundation.h>
 
//协议是从类抽出的一些方法,如何实现这个协议的类都需要实现这里面的方法
@protocol SecProtocol <NSObject>
 
@required
//发工资
- (void)payoff;
//打电话
- (void)tel;
 
@optional
 
@end
Boss
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <Foundation/Foundation.h>
#import "SecProtocol.h"
 
//委托人
@interface Boss : NSObject
 
@property (nonatomic, retain) id<SecProtocol> delegate;
 
//管理
- (void)manage;
//教导新员工
- (void)teach;
//打电话
- (void)tel;
//发工资
- (void)payoff;
@end
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#import "Boss.h"
 
@implementation Boss
 
@synthesize delegate;
 
- (id)init{
    self = [super init];
    if(self) {
         
    }
    returnself;
}
 
- (void)manage{
    NSLog(@"boss manage");
}
 
- (void)teach{
    NSLog(@"boss teach");
}
 
- (void)payoff{
    [self.delegate payoff];
}
 
- (void)tel{
    [self.delegate tel];
}
@end
Sec
?
1
2
3
4
5
6
#import <Foundation/Foundation.h>
#import "SecProtocol.h"
// 秘书类,实现协议, 委托对象
@interface Sec : NSObject<SecProtocol>
 
@end
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#import "Sec.h"
 
@implementation Sec
 
- (id)init{
    self = [super init];
    if(self) {
         
    }
    returnself;
}
 
- (void)payoff{
    NSLog(@"sec payoff!");
}
 
- (void)tel{
    NSLog(@"sec tel");
}
@end
调用方法
?
1
2
3
4
5
6
7
8
9
Boss *boss = [[Boss alloc] init];//委托人
    Sec *sec = [[Sec alloc] init];//委托对象,实现了一定协议的对象
    boss.delegate = sec;//将委托对象复制给委托人里面的委托对象
     
    [boss teach];
    [boss manage];
     
    [boss tel];
    [boss payoff];

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在快递公司寄的东西丢了我该怎么办 不小心给了快递员子一个差评怎么办 不小心用发霉了的杯子喝了水怎么办 唐三复活了小舞失去的魂环怎么办了 我该怎么办?身陷动漫城输了很多钱 庄家开2球大小球踢成2球怎么办 去哪儿网订机票时邮箱写错了怎么办 在南航航班上把手机丢飞机上怎么办 买了品牌鞋穿了一周就破了怎么办 狗让狠狠的打了一顿不理人了怎么办 调好米粉宝宝吃的时候就凉了怎么办 情人间闹分手删了微信后悔了怎么办 8个月宝宝不坐椅子一直要抱怎么办 2个月婴儿3天没有拉大便了怎么办 8个月的宝宝不吃米糊和稀饭怎么办 2岁零5个月的宝宝不说话怎么办 两岁宝宝不拔掉老是拉在裤上怎么办 一岁的宝宝吞了一颗五子棋该怎么办 别人欠我钱还把我拉黑我该怎么办 欠我钱的人耍赖不还我该怎么办 交易猫买的炉石传说号被找回怎么办 淘宝上卖水果过季了不想下架怎么办 两岁宝宝被蚊子咬了挠破流水怎么办 我打了人一拳他就躺地下了怎么办 在微信上被认识的人骗了钱该怎么办 微信上面被不认识的人骗了钱怎么办 柜体和订做的柜门颜色对不上怎么办 拉鞭炮的车压了我的电车不陪怎么办 脚爱出汗穿高跟凉鞋总往前滑怎么办 视频的格式是VⅠD打开很慢怎么办 汕头普法学法我点了考试没考怎么办 德云的生活攻略第三天卡关了怎么办 我的世界房子被参观的人烧了怎么办 新买的手表返厂维修弄划伤了怎么办 糖猫手表丢了别人捡了换了卡怎么办 我妈总怀疑我爸偷她东西怎么办啊 在百度上买的演出票不配送了怎么办 北交大预报名信息填错了怎么办保研 我租了个店面房子但是写了拆怎么办 电话换了微信账号密码都忘了怎么办 宝宝被开水烫了的泡泡破皮了怎么办