關(guān)于通知中心(NSNotification)的應(yīng)用

NSNotification的結(jié)構(gòu)

點(diǎn)進(jìn)NSNotification類中進(jìn)去,可以看到他的基本屬性和一些方法。

//消息的唯一標(biāo)示,用來(lái)區(qū)分各個(gè)消息,也就是說(shuō)具有唯一性。
@property (readonly, copy) NSNotificationName name;
//這個(gè)成員變量定義一個(gè)對(duì)象,可以理解為針對(duì)某一個(gè)對(duì)象的消息,也可以進(jìn)行傳值。
@property (nullable, readonly, retain) id object;
//這個(gè)字典可以進(jìn)行傳值。把你需要的參數(shù)傳出去。
@property (nullable, readonly, copy) NSDictionary *userInfo;

初始化方式

通知中心的創(chuàng)建,是以單例的形式創(chuàng)建。

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSNotificationName)aName object:(nullable id)anObject;

其中第一個(gè)參數(shù),是向通知中心添加觀察者。第二個(gè)參數(shù),是接受到通知后相應(yīng)的事件,第三個(gè)參數(shù)是消息的唯一標(biāo)示。第四個(gè)參數(shù)是用于接收固定對(duì)象的通知。如果填寫(xiě),則在對(duì)象發(fā)送通知時(shí),也需要設(shè)置一致的固定對(duì)象。一般填寫(xiě)nil。接收所有對(duì)象發(fā)送的通知。
發(fā)送通知的方法有兩個(gè),對(duì)應(yīng)三種情況。

無(wú)userInfo

- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject;

很簡(jiǎn)單,將通知中心的唯一標(biāo)示填進(jìn)去就可以了,anObject可填寫(xiě)(有參),可不填寫(xiě)(無(wú)參),
在響應(yīng)通知的方法里,用object去接收參數(shù)。如果用userInfo去接受的話。userInfo則為nil。

有userInfo

- (void)postNotificationName:(NSNotificationName)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

可將需要的參數(shù)放入aUserInfo的字典中。在響應(yīng)通知的方法中用userInfo去接受參數(shù)。

通知的應(yīng)用

下面舉個(gè)代碼例子

控制器A

//創(chuàng)建通知中心
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(gotoHomeView:) name:@"NgotoHomeView" object:nil];
//響應(yīng)方法
- (void)gotoHomeView: (NSNotification *)sender {
    NSInteger number = [[sender.userInfo valueForKey:@"number"] integerValue];
  
}

<控制器B

//發(fā)送通知
    [[NSNotificationCenter defaultCenter]postNotificationName:@"NgotoHomeView" object:nil userInfo:@{@"number": @"0"}];

當(dāng)在控制器B里觸發(fā)發(fā)送通知的方法,則在控制器A中會(huì)接收到通知,前提是A控制器已經(jīng)創(chuàng)建。

需要注意點(diǎn)

最后通知中心需要移除,原則是在哪創(chuàng)建,在哪移除。上面的例子就是在控制器A中移除。保險(xiǎn)起見(jiàn)將一處方法寫(xiě)在dealloc方法中,所以上面的例子還差一步

- (void)dealloc {

    [[NSNotificationCenter defaultCenter]removeObserver:@”NgotoHomeView“];
}

最后需要注意的是如果創(chuàng)建通知中心時(shí),object參數(shù)沒(méi)有為空,則在發(fā)送通知的方法中,參數(shù)object應(yīng)保持一致。否則將接收不到通知。

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

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,641評(píng)論 19 139
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 12,446評(píng)論 6 13
  • 點(diǎn)擊查看原文 Web SDK 開(kāi)發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 14,316評(píng)論 0 15
  • 概述 在多數(shù)移動(dòng)應(yīng)用中任何時(shí)候都只能有一個(gè)應(yīng)用程序處于活躍狀態(tài),如果其他應(yīng)用此刻發(fā)生了一些用戶感興趣的那么通過(guò)通知...
    莫離_焱閱讀 6,719評(píng)論 1 8
  • 小簡(jiǎn)在辦公室做了一個(gè)小調(diào)查 問(wèn)了小伙伴們一個(gè)問(wèn)題 假如你花了300塊錢點(diǎn)了一杯貓屎咖啡 嘗了一口發(fā)現(xiàn)不好喝 你是會(huì)...
    因?yàn)橄贪?/span>閱讀 1,090評(píng)論 0 1

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