黑马IOS - OC protocol与Delegate 理解

来源:互联网 发布:网上怎样开淘宝店 编辑:程序博客网 时间:2024/05/22 01:47

我们常说代理协议(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 ClassCid agent;
// 其是也可以这样写: ClassB* agent;
// 这样写更加直观: ClassB* classB;
@property (nonatomic, strong) id<ClassADelegate> agent;@end

我们知道agent是一个ClassB, 他提供了所有ClassB的方法,这样我们就可以把一部分ClassC的工作放到ClassB中去实现

这就是代理。

【转】http://blog.langyufei.com/?p=273

0 0
原创粉丝点击