iOS設(shè)計(jì)模式1 - 委托模式(delegate)

一、解析

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ā)貨中!!");
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容