最近刚接触协议@protocol 和委托 delegate 弄得一头雾水 通过这几天的学习有了一定的了解 :
首先 协议protocol 和委托delegate 是两个完全不同的概念 放在一起说 是因为我们总是在同一个头文件里看到它们;
首先解释一下什么是委托 :举个例子 ,我工作的时候给你打电话,让你帮我查某人的电话号码,把事情交给你后,我继续工作 过了几分钟 你打电话回来告诉我 查到的结果。。。@end 那么你就是我的委托对象,当你完成事件后 返回给我一个值;这就是委托。也就是 :我.delegete = 你;
Delegate本身应该称为一种设计模式。
是把一个类自己需要做的一部分事情,让另一个类(也可以就是自己本身)来完成。
比如
设定一个协议方法:delegateMethod@protocol MyDelegate
-(void)delegateMethod;
@end
在A类中实现该协议并实现方法:
@interface A : UIViewController <MyDelegate>
@implementation A
-(void)delegateMethod
{
NSLog(@"delegateMethod");
}
在B中定义delegate指针;
@interface B : UIViewController
{
id delegate;
}
@property(nonatomic,retain) id delegate;
@end
@implementation B
@synthesize delegate;
A到B的过程中给delegate指名代理
B.delegate = self;
B中调用代理方法;
[delegate delegateMethod];
这就是B去委托A实现delegateMethod方法;
其实delegate只是一种模式,大家约定俗成,当把自己内部一部分实现暴露给另外一个类去做的时候,就叫实际做事的类为delegate,当然你也可你把它命名为任何名字;
这只是我的个人理解,希望可以给刚涉及这方面的同学一点点启示, 不妥的地方请批评指正~~~~
来源:oschina
链接:https://my.oschina.net/u/591005/blog/71895