最近剛接觸協議@protocol 和委託 delegate 弄得一頭霧水 經過這幾天的學習有了必定的瞭解 :設計模式
首先 協議protocol 和委託delegate 是兩個徹底不一樣的概念 放在一塊兒說 是由於咱們老是在同一個頭文件裏看到它們;學習
首先解釋一下什麼是委託 :舉個例子 ,我工做的時候給你打電話,讓你幫我查某人的電話號碼,把事情交給你後,我繼續工做 過了幾分鐘 你打電話回來告訴我 查到的結果。。。@end 那麼你就是個人委託對象,當你完成事件後 返回給我一個值;這就是委託。也就是 :我.delegete = 你;atom
Delegate自己應該稱爲一種設計模式。spa
是把一個類本身須要作的一部分事情,讓另外一個類(也能夠就是本身自己)來完成。.net
好比設計
設定一個協議方法: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指名代理code
B.delegate = self;
B中調用代理方法;對象
[delegate delegateMethod];
這就是B去委託A實現delegateMethod方法;
其實delegate只是一種模式,你們約定俗成,當把本身內部一部分實現暴露給另一個類去作的時候,就叫實際作事的類爲delegate,固然你也可你把它命名爲任何名字;
這只是個人我的理解,但願能夠給剛涉及這方面的同窗一點點啓示, 不妥的地方請批評指正~~~~