今天看了一篇关于协议与代理的讲解,感觉还不错的,如下:
1、协议(protocol),就是使用了这个协议后,必须按照协议规定的内容来处理事情,协议中要求的方法必须实现(@optional的方法除外)。
protocol是一种语法,它提供了一个很方便的、实现delegate模式的机会。
定义protocol如下:
@protocol ClassBDelegate<NSObject>
(void)methodOne;
@optional(void)methodTwo:(NSString *)value;
@end
定义了一个ClassB的协议,这个协议中包含两个方法,其中methodTwo为可选的。
在ClassA的头文件(ClassA.h)中实现这个协议,如下代码:
@interface ClassA<ClassBDelegate>
@end
在ClassA的实现文件(ClassA.m)中实现ClassBDelegate的两个方法,其中methodTwo可以不实现,如下:
-
(void)methodOne{
// 具体实现内容
}
-
(void)methodTwo:(NSString *)value{
// 具体实现内容
}
2、代理(delegate),顾名思义就是委托别人办事,当一件事情发生后,自己不处理,让别人来处理。
delegate和protocol没有关系。delegate本身是一种设计模式。是把一个类自己需要做的一部分事情,让另一个类(也可以就是自己本身)来完成。
在ClassB的头文件(ClassB.h)中定义一个代理如下:
@interface ClassB
@property (nonatomic, unsafe_unretained) id<ClassBDelegate> delegate;
@end
这样,当我们在ClassB的实现文件(ClassB.m)中遇到想让别的类(如 ClassA)处理的问题时,就可以这样
[self.delegate methodOne];
[self.delegate methodTwo:@"需要传递的值"];
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。