小白理解iOS代理模式

1.情景理解代理模式:

之前老王借給李賴皮2000塊錢,可是一直沒有拿回這個(gè)錢烈拒,老王想通過法律途徑把這筆錢要回來圆裕,可是自己沒有這個(gè)能力或者是自己不愿意直接面對(duì)李賴皮,就打算找一個(gè)代理律師幫自己要回這筆錢荆几,整個(gè)過程也就是老王通過律師要回錢吓妆。
老王: 委托方
律師: 代理方

前期準(zhǔn)備工作一(老王寫協(xié)議的準(zhǔn)備工作)

老王想找個(gè)律師給自己干活,并且還得告訴律師自己需要律師做什么事情以及怎么去做吨铸,那就得簽一個(gè)幫他要錢的協(xié)議(GetMoneyDelegate):協(xié)議如下(寫在Person.h):

//  Person.h
#import <Foundation/Foundation.h>

//定義協(xié)議和方法
@protocol GetMoneyDelegate <NSObject>
-(void)getMoney:(NSString *)name value:(NSString *)money;

@end

@interface Person : NSObject
//聲明委托變量
@property(nonatomic,retain) id<GetMoneyDelegate> person_delegate;

-(void)wantMoneyBack;

@end

向誰要錢行拢?又要多少錢呢?這個(gè)是老王需要告訴律師的诞吱,所以協(xié)議里面寫了一個(gè)要錢的方法舟奠,并且這個(gè)方法帶了參數(shù):欠債人名字和金額:

-(void)getMoney:(NSString *)name value:(NSString *)money;

另外協(xié)議里面還有一個(gè)person_delegate,這是老王在協(xié)議里聲明的一個(gè)代理,找的代理律師回頭賦值到這個(gè)代理房维,代理律師就可以做事了沼瘫。

通過這樣一個(gè)協(xié)議,老王回頭在自己的.m文件中wantMoneyBack的時(shí)候告訴自己的代理去執(zhí)行要錢的方法咙俩,并且告訴向誰要錢伍纫,要多少錢就行了,至于代理怎么去做就不管自己的事了堕澄,老王就可以睡大覺等著了。這一切放在Person.m中:

//  Person.m
#import "Person.h"

@implementation Person

-(void)wantMoneyBack{
    NSLog(@"我想要回我的錢");
    [self.person_delegate getMoney:@"李賴皮" value:@"2000"];
}

@end

前期準(zhǔn)備工作二(律師的準(zhǔn)備工作)

首先晓锻,律師想去為老王要錢,那么就必須遵守老王的協(xié)議飞几,這樣律師才知道應(yīng)該向誰要錢并且要多少錢砚哆,所以律師在自己的Lawyer.h中遵守老王的協(xié)議:

//  Lawyer.h
#import <Foundation/Foundation.h>
#import "Person.h"

@interface Lawyer : NSObject<GetMoneyDelegate>

@end

并且在自己的Lawyer.m中實(shí)現(xiàn)協(xié)議中的要錢方法:

//  Lawyer.m
#import "Lawyer.h"

@implementation Lawyer

-(void)getMoney:(NSString *)name value:(NSString *)money{
//下面就是代理需要幫委托方做的事情,做什么事情怎么做等參數(shù)是委托方傳遞的
    NSLog(@"本律師幫你向%@要回了%@元錢",name,money);
}

@end

然后接下來就是真正的律師干活的階段了

干活階段

在ViewController.m中:

//  ViewController.m
#import "ViewController.h"
#import "Person.h"
#import "Lawyer.h"
@interface ViewController ()

@end

@implementation ViewController
- (void)viewDidLoad {
    
    Person *laowang = [Person new];
    Lawyer *lawyer = [Lawyer new];
    //老王找到律師給自己做代理
    laowang.person_delegate = lawyer;
    //只有老王的代理也就是律師實(shí)現(xiàn)了要錢的方法屑墨,老王這個(gè)委托方才有底氣說要錢
    if ([lawyer respondsToSelector:@selector(getMoney:value:)]) {
        [laowang wantMoneyBack];
    }
   
}

@end

執(zhí)行結(jié)果如下:


控制臺(tái)打印結(jié)果

所以這整個(gè)過程我們就可以看到躁锁,老王這個(gè)對(duì)象僅僅調(diào)用了自己的wantMoneyBack方法,方法體里是讓自己的代理為自己做事卵史,并且把參數(shù)設(shè)置好战转,并沒有自己親自去要錢,就達(dá)到了要錢的目的以躯。

-(void)wantMoneyBack{
   NSLog(@"我想要回我的錢");
   [self.person_delegate getMoney:@"李賴皮" value:@"2000"];
}

2.代理模式在iOS中的應(yīng)用

代理在iOS中有一個(gè)重要的應(yīng)用就是反向傳值槐秧,比如有兩個(gè)控制器AViewController和BViewController,點(diǎn)擊A的跳轉(zhuǎn)按鈕就能跳到B控制器忧设,在B控制器的textField上輸入字符串并且點(diǎn)擊返回刁标,回到A控制器后,字符串顯示在A控制器的視圖上址晕。顯然膀懈,B控制器是沒有能力在A控制器上顯示自己內(nèi)部的字符串的,但是我們可以通過代理的方式來實(shí)現(xiàn)谨垃。
可以參考這篇文章:
https://www.cnblogs.com/jukaiit/p/5021730.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末启搂,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子刘陶,更是在濱河造成了極大的恐慌胳赌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匙隔,死亡現(xiàn)場(chǎng)離奇詭異疑苫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)牡直,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門缀匕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人碰逸,你說我怎么就攤上這事乡小。” “怎么了饵史?”我有些...
    開封第一講書人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵满钟,是天一觀的道長(zhǎng)胜榔。 經(jīng)常有香客問我,道長(zhǎng)湃番,這世上最難降的妖魔是什么夭织? 我笑而不...
    開封第一講書人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮吠撮,結(jié)果婚禮上尊惰,老公的妹妹穿的比我還像新娘。我一直安慰自己泥兰,他們只是感情好弄屡,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鞋诗,像睡著了一般膀捷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上削彬,一...
    開封第一講書人閱讀 51,604評(píng)論 1 305
  • 那天全庸,我揣著相機(jī)與錄音,去河邊找鬼融痛。 笑死壶笼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酌心。 我是一名探鬼主播拌消,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼挑豌,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼安券!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起氓英,我...
    開封第一講書人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤侯勉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后铝阐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體址貌,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年徘键,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了练对。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吹害,死狀恐怖螟凭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情它呀,我是刑警寧澤螺男,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布棒厘,位于F島的核電站,受9級(jí)特大地震影響下隧,放射性物質(zhì)發(fā)生泄漏奢人。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一淆院、第九天 我趴在偏房一處隱蔽的房頂上張望何乎。 院中可真熱鬧,春花似錦土辩、人聲如沸宪赶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搂妻。三九已至,卻和暖如春辕棚,著一層夾襖步出監(jiān)牢的瞬間欲主,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工逝嚎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扁瓢,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓补君,卻偏偏與公主長(zhǎng)得像引几,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挽铁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容