一、解析
1. 原理
在IOS中委托通過一種@protocol的方式實(shí)現(xiàn),所以又稱為協(xié)議.協(xié)議是多個類共享的一個方法列表,在協(xié)議中所列出的方法沒有響應(yīng)的實(shí)現(xiàn),由其它人來實(shí)現(xiàn).這叫好比我想買個手機(jī),所以我有個buyIphone
方法,但是我不知道誰那買手機(jī),所以把這個需求發(fā)布出去(比如公布在網(wǎng)站上),如果有賣手機(jī)的商人(也就是說他能實(shí)現(xiàn)buyIphone這個方法)看到,他就會接受我的委托,(在商人自己的類中實(shí)現(xiàn)<XXXdelegate>),那么我的委托對象就指向了這個商人..當(dāng)我要買手機(jī)的時候,直接找他就行了.
委托是指給一個對象提供機(jī)會對另一個對象中的變化做出反應(yīng)或者影響另一個對象的行為。其基本思想是:兩個對象協(xié)同解決問題。一個對象非常普通,并且打算在廣泛的情形中重用。它存儲指向另一個對象(即它的委托)的引用,并在關(guān)鍵時刻給委托發(fā)消息。消息可能只是通知委托發(fā)生了某件事情,給委托提供機(jī)會執(zhí)行額外的處理,或者消息可能要求委托提供一些關(guān)鍵的信息以控制所發(fā)生的事情。
2. 作用
1)委托協(xié)助對象主體完成某項(xiàng)操作,將需要定制化的操作通過委托對象來自定義實(shí)現(xiàn),達(dá)到和子類化對象主體同樣的作用。
2)事件監(jiān)聽,委托對象監(jiān)聽對象主體的某些重要事件,對事件做出具體響應(yīng)或廣播事件交給需要作出響應(yīng)的對象。
3. 委托方法通常包括3種動詞:should、will、did
- should表示一個動作發(fā)生前,通常帶有返回值,可以在動作發(fā)生之前改變對象狀態(tài)。
- will在動作發(fā)生前,委托可以對動作做出響應(yīng),但不帶有返回值。
- did在動作發(fā)生后做出的響應(yīng)。
二、實(shí)現(xiàn)
1. 委托類
.h文件:
@protocol MyDelegate
//委托方法
-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money;
@end
@interface My : NSObject
@property(weak,nonatomic) id<MyDelegate> delegate;//weak是防止內(nèi)存引用指數(shù)增加而導(dǎo)致委托對象無法釋放的問題
@end
.m文件:
//代碼中聲明了一個協(xié)議,名叫Mydelegate,在其中有一個buyIphone方法,即一個委托項(xiàng)。
//當(dāng)我要購買手機(jī)的時候只需要通過delegate 調(diào)用BuyIphone方法即可.
//如下:
-(void)willbuy
{
[delegate buyIphone:@"iphone 4s" money:@"4888"];
}
2. 實(shí)現(xiàn)這一委托的類
.h文件引用并調(diào)用:
#import "My.h"
@interface Business : NSObject<MyDelegate>
@property My *my;
@end
.m文件實(shí)現(xiàn)委托:
//委托指向:(self或者其他實(shí)例里實(shí)現(xiàn)委托)
my.delegate = self;
//實(shí)現(xiàn)委托方法:
-(void)buyIphone:(NSString *)iphoneType money:(NSString *)money
{
NSLog(@"手機(jī)有貨,這個價錢賣你了,發(fā)貨中!!");
}