我们常说代理协议(Delegate protocol) 其实代理与协议是两个完全不同的概念,放在一起说,是因为我梦经常在同一个文件中看到。
Protocol:
定义protocol如下:
@interface ClassADelegate
- (void)method1;
- (void)method2;
...
...
@end
就是定义了一组方法,这一组方法放在一起就是一个protocol, 也就是协议。
协议方法都是要被遵循的。所以在ClassB.h中有:
@interface ClassB <ClassADelegate>
@end
就是说ClassB遵循这个协议。
并且在ClassB.m中实现这个方法:
@implementation ClassB
- (void)method1
{
}
- (void)method2
{
}
@end
这样类B遵循协议,就可以放心的实现和调用这个协议中的所有方法了。
ClassB * cb = [[ClassB alloc] init];
[cb method1];
[cb method2];
这就是协议的具体用法。
Delegate
那么Dalegate又是什么呢? 其实Delegate和Protocol没有关系,他应该称作是一种设计模式。
他是将一个类要做的一件事,委托(代理)另一个类(也可以是他本身)来完成。
比如上面的例子中我在定义一个ClassC:
<pre class="objc" name="code">@interface ClassC
id agent;
// 其是也可以这样写: ClassB* agent;
// 这样写更加直观: ClassB* classB;
@property (nonatomic, strong) id<ClassADelegate> agent;
@end
我们知道agent是一个ClassB, 他提供了所有ClassB的方法,这样我们就可以把一部分ClassC的工作放到ClassB中去实现
这就是代理。