代理模式和通知入門

代理模式

官方解釋
Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegating object keeps a reference to the other object—the delegate—and at the appropriate time sends a message to it. The message informs the delegate of an event that the delegating object is about to handle or has just handled. The delegate may respond to the message by updating the appearance or state of itself or other objects in the application, and in some cases it can return a value that affects how an impending event is handled. The main value of delegation is that it allows you to easily customize the behavior of several objects in one central object.

翻譯過來就是:
代理是一種簡單而功能強大的設(shè)計模式森瘪,這種模式用于一個對象“代表”另外一個對象和程序中其他的對象進行交互巡揍。 主對象(這里指的是delegating object)中維護一個代理(delegate)的引用并且在合適的時候向這個代理發(fā)送消息瓷们。這個消息通知“代理”主對象即將處理或是已經(jīng)處理完了某一個事件岗钩。這個代理可以通過更新自己或是其它對象的UI界面或是其它狀態(tài)來響應(yīng)主對象所發(fā)送過來的這個事件的消息审磁」憾裕或是在某些情況下能返回一個值來影響其它即將發(fā)生的事件該如何來處理。代理的主要價值是它可以讓你容易的定制各種對象的行為觅够。注意這里的代理是個名詞胶背,它本身是一個對象,這個對象是專門代表被代理對象來和程序中其他對象打交道的喘先。

舉個栗子說就是钳吟,我想做租房子,但是不知道怎么租窘拯,所以我找房屋中介幫我租红且。

協(xié)議的編寫規(guī)范:

1.一般情況下, 當(dāng)前協(xié)議屬于誰, 我們就將協(xié)議定義到誰的頭文件中
2.協(xié)議的名稱一般以它屬于的那個類的類名開頭, 后面跟上protocol或者delegate
3.協(xié)議中的方法名稱一般以協(xié)議的名稱protocol之前的作為開頭
4.一般情況下協(xié)議中的方法會將觸發(fā)該協(xié)議的對象傳遞出去
5.一般情況下一個類中的代理屬于的名稱叫做 delegate

6.當(dāng)某一個類要成為另外一個類的代理的時候,一般情況下在.h中用@protocol 協(xié)議名稱;告訴當(dāng)前類 這是一個協(xié)議.


代碼示例:

在SecViewController.h中

//第一步:定義一個協(xié)議       
@protocol SecViewControllerDelegate <NSObject>          
// 第二部:聲明需要做的事的方法           
@required   //必須實現(xiàn)的方法          
- (void)changeBackViewColor:(UIColor *)color;          
@optional   //可選實現(xiàn)的方法        
- (void)hadText:(NSString *)text;         
@end
@interface SecViewController : UIViewController
// 第三步:用id類型存儲改協(xié)議,命名為delegate(這里最好用weak類型)
@property (nonatomic, weak) id<SecViewControllerDelegate> delegate;
@end

在SecViewController.m文件中

- (void)back{
[self.delegate changeBackViewColor:[UIColor orangeColor]];
[self.delegate hadText:@"text-----text"];
[self.navigationController popViewControllerAnimated:YES];

}


>在ViewController.m文件中

> ```
>//繼承協(xié)議
>@interface ViewController () <SecViewControllerDelegate>
>//成為代理
>SecViewController *svc = [[SecViewController alloc] init];
svc.delegate = self;
>// 實現(xiàn)代理方法    
> - (void)changeBackViewColor:(UIColor *)color
{
    self.view.backgroundColor = color;
}
- (void)hadText:(NSString *)text
{
    NSLog(@"%@",text);
}

通知方法

很簡單涤姊,就是一個發(fā)通知暇番,一個接收到這個通知然后做事情,但是用多了不好了思喊,容易亂壁酬,項目中太多的通知,給人感覺就沒有逼格了,哈哈厨喂,還是多用代理和Block

 [[NSNotificationCenter defaultCenter] postNotificationName:@"ChangeBack" object:@"參數(shù)"];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(change:) name:@"ChangeBack"  object:nil];
}
- (void)change:(NSNotification *)notification {
   NSLog(@"%@",notification.object);
}

最后別忘了,在不用的時候給銷毀

- (void)dealloc
{
  [[NSNotificationCenter defaultCenter] removeObserver:@"ChangeBack" ];  
}

MarkDown文本和代碼均可在github上下載:GitHub地址 : CoderVan

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末庄呈,一起剝皮案震驚了整個濱河市蜕煌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诬留,老刑警劉巖斜纪,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異文兑,居然都是意外死亡盒刚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門绿贞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來因块,“玉大人,你說我怎么就攤上這事籍铁∥猩希” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵拒名,是天一觀的道長吩愧。 經(jīng)常有香客問我,道長增显,這世上最難降的妖魔是什么雁佳? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮同云,結(jié)果婚禮上糖权,老公的妹妹穿的比我還像新娘。我一直安慰自己梢杭,他們只是感情好温兼,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著武契,像睡著了一般募判。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咒唆,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天届垫,我揣著相機與錄音,去河邊找鬼全释。 笑死装处,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播妄迁,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼寝蹈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了登淘?” 一聲冷哼從身側(cè)響起箫老,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎黔州,沒想到半個月后耍鬓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡流妻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年牲蜀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绅这。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡涣达,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出证薇,到底是詐尸還是另有隱情峭判,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布棕叫,位于F島的核電站林螃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏俺泣。R本人自食惡果不足惜疗认,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伏钠。 院中可真熱鬧横漏,春花似錦、人聲如沸熟掂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赴肚。三九已至素跺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間誉券,已是汗流浹背指厌。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踊跟,地道東北人踩验。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親箕憾。 傳聞我的和親對象是個殘疾皇子牡借,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)袭异,斷路器蓖捶,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結(jié)起來就是把...
    Dove_iOS閱讀 27,125評論 29 470
  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,682評論 0 9
  • 原文鏈接http://www.cnblogs.com/kenshincui/p/4186022.html 音頻在i...
    Hyman0819閱讀 21,670評論 4 74
  • 帕镝悖”是怎么死的湃缎?這個故事很經(jīng)典,寓意很深蠢壹! 牛耕田回來嗓违,躺在欄里,疲憊不堪地喘著粗氣图贸,狗跑過來看它蹂季。 “唉,老朋友...
    小牛店鋪指導(dǎo)閱讀 621評論 0 1