今天看了一篇關於協議與代理的講解,感受還不錯的,以下:設計模式
一、協議(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:@"須要傳遞的值"];