您的位置:首页 > 移动开发 > IOS开发

iOS 委托和协议

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

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

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

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

例子待续...

协议

01
#import
<Foundation/Foundation.h>
02
03
//协议是从类抽出的一些方法,如何实现这个协议的类都需要实现这里面的方法
04
@protocol
SecProtocol <NSObject>
05
06
@required
07
//发工资
08
-
(
void
)payoff;
09
//打电话
10
-
(
void
)tel;
11
12
@optional
13
14
@end
Boss

01
#import
<Foundation/Foundation.h>
02
#import
"SecProtocol.h"
03
04
//委托人
05
@interface
Boss : NSObject
06
07
@property
(nonatomic, retain) id<SecProtocol> delegate;
08
09
//管理
10
-
(
void
)manage;
11
//教导新员工
12
-
(
void
)teach;
13
//打电话
14
-
(
void
)tel;
15
//发工资
16
-
(
void
)payoff;
17
@end
01
#import
"Boss.h"
02
03
@implementation
Boss
04
05
@synthesize
delegate;
06
07
-
(id)init{
08
self
= [super init];
09
if
(self)
{
10
 
11
}
12
return
self;
13
}
14
15
-
(
void
)manage{
16
NSLog(@
"boss
manage"
);
17
}
18
19
-
(
void
)teach{
20
NSLog(@
"boss
teach"
);
21
}
22
23
-
(
void
)payoff{
24
[self.delegate
payoff];
25
}
26
27
-
(
void
)tel{
28
[self.delegate
tel];
29
}
30
@end
Sec

1
#import
<Foundation/Foundation.h>
2
#import
"SecProtocol.h"
3
//
秘书类,实现协议, 委托对象
4
@interface
Sec : NSObject<SecProtocol>
5
6
@end
01
#import
"Sec.h"
02
03
@implementation
Sec
04
05
-
(id)init{
06
self
= [super init];
07
if
(self)
{
08
 
09
}
10
return
self;
11
}
12
13
-
(
void
)payoff{
14
NSLog(@
"sec
payoff!"
);
15
}
16
17
-
(
void
)tel{
18
NSLog(@
"sec
tel"
);
19
}
20
@end
调用方法

view
source

print?

1
Boss
*boss = [[Boss alloc] init];
//委托人
2
Sec
*sec = [[Sec alloc] init];
//委托对象,实现了一定协议的对象
3
boss.delegate
= sec;
//将委托对象复制给委托人里面的委托对象
4
 
5
[boss
teach];
6
[boss
manage];
7
 
8
[boss
tel];
9
[boss
payoff];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: