今天看了一篇关于协议与代理的讲解,感受还不错的,以下:设计模式
一、协议(protocol),就是使用了这个协议后,必须按照协议规定的内容来处理事情,协议中要求的方法必须实现(@optional的方法除外)。atom
protocol是一种语法,它提供了一个很方便的、实现delegate模式的机会。设计
定义protocol以下:代理
@protocol ClassBDelegate<NSObject>code
(void)methodOne;
@optionalget
(void)methodTwo:(NSString *)value;
@endio
定义了一个ClassB的协议,这个协议中包含两个方法,其中methodTwo为可选的。语法
在ClassA的头文件(ClassA.h)中实现这个协议,以下代码:方法
@interface ClassA<ClassBDelegate>
@end
在ClassA的实现文件(ClassA.m)中实现ClassBDelegate的两个方法,其中methodTwo能够不实现,以下:协议
(void)methodOne{
// 具体实现内容
}
(void)methodTwo:(NSString *)value{
// 具体实现内容
}
二、代理(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:@"须要传递的值"];