NSNotification通知正確使用模板

一.系統(tǒng)消息
1.最近項(xiàng)目中發(fā)現(xiàn)通知使用不當(dāng),會(huì)導(dǎo)致通知回調(diào)不是一一對(duì)應(yīng)哲银,有時(shí)候會(huì)回調(diào)兩次,導(dǎo)致綁定監(jiān)聽(tīng)的方法會(huì)多次調(diào)用(我們程序就頁(yè)面回退了多次,因?yàn)槲覀兘壎ǖ氖琼?yè)面回退的方法)
原因:就是通知注冊(cè)和移除不對(duì)應(yīng)導(dǎo)致华匾。
2.如果你的頁(yè)面是 UIView,那很簡(jiǎn)單可以直接有下面一個(gè)函數(shù)就搞定

#pragma mark - keyboard
- (void)willMoveToWindow:(UIWindow *)newWindow //(willMoveToWindow為 UIView接口)注冊(cè)鍵盤相關(guān)通知
{
    if (newWindow) {
        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object: nil];
        [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardWillHide:) name: UIKeyboardWillHideNotification object: nil];
    }
    else
    {
        [[NSNotificationCenter defaultCenter] removeObserver: self];//移除
    }
}

或者(以下是我們自己封裝的接口机隙,就是頁(yè)面顯示完成蜘拉,頁(yè)面消失完成兩個(gè)接口)

- (void)componentDidDisplay
{
     [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object: nil];
}

- (void)componentDidDisappear
{
     [[NSNotificationCenterdefaultCenter]removeObserver:self];
}

3.如果你的頁(yè)面是 UIViewController
有兩方法 推薦用第一種

//法1(頁(yè)面將要顯示的時(shí)候添加,頁(yè)面將要消失的時(shí)候移出)
- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object: nil];
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [[NSNotificationCenter defaultCenter] removeObserver: self];
}

法2 (頁(yè)面創(chuàng)建的時(shí)候添加 viewDidLoad有鹿, 頁(yè)面銷毀的時(shí)候移出 dealloc)
不推薦的原因是 ARC模式下(MRC一樣)如果block循環(huán)引用或計(jì)時(shí)器之類的使用不當(dāng)旭旭,會(huì)導(dǎo)致dealloc不調(diào)用,也就導(dǎo)致通知不對(duì)應(yīng)

//頁(yè)面創(chuàng)建的時(shí)候添加 viewDidLoad葱跋, 頁(yè)面銷毀的時(shí)候移出 dealloc
- (void)viewDidLoad
{
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(keyboardWillShow:) name: UIKeyboardWillShowNotification object: nil];
}

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver: self];
}

2017年1月5日
二.自定義消息
以上頁(yè)面由于發(fā)送的是系統(tǒng)通知UIKeyboardWillShowNotification持寄,不需要調(diào)用postNotificationName
1.自定義消息除了正確參考系統(tǒng)消息寫法外源梭,還要自己發(fā)通知
公共宏頁(yè)面

#define kRrefreshPasswordNotification        @"huRefershPassword"

A頁(yè)面//發(fā)通知

[[NSNotificationCenter defaultCenter] postNotificationName:kRrefreshPasswordNotification object:nil];  

B頁(yè)面//注冊(cè)消息和方法--初始化時(shí)候?qū)? (參照系統(tǒng)消息寫法)

[[NSNotificationCenter defaultCenter] addObserver:self selector: @selector(refreshData:) name: kRrefreshPasswordNotification object:nil];  
[[NSNotificationCenter defaultCenter] removeObserver: self];
-(void)refreshData:(NSNotification*)notification
{
    NSDictionary *param = [notification object];//通過(guò)這個(gè)獲取到傳遞的對(duì)象
    [self _unlockSubmitButton];
    [self reloadBankAndMoney];
}
  • (void)addNotifictionListener
    {
    [kNotificationCenter addObserver:self selector:@selector(receiveSocketData:) name:kRefreshPushCourceNotification object:nil];
    }

  • (void)removeNotificationListener
    {
    [kNotificationCenter removeObserver: self];
    }
    如果您發(fā)現(xiàn)本文對(duì)你有所幫助,如果您認(rèn)為其他人也可能受益际看,請(qǐng)把它分享出去咸产。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市仲闽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌僵朗,老刑警劉巖赖欣,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異验庙,居然都是意外死亡顶吮,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門粪薛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悴了,“玉大人,你說(shuō)我怎么就攤上這事违寿∨冉唬” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵藤巢,是天一觀的道長(zhǎng)搞莺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)掂咒,這世上最難降的妖魔是什么才沧? 我笑而不...
    開(kāi)封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮绍刮,結(jié)果婚禮上温圆,老公的妹妹穿的比我還像新娘。我一直安慰自己孩革,他們只是感情好岁歉,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著嫉戚,像睡著了一般刨裆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彬檀,一...
    開(kāi)封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天帆啃,我揣著相機(jī)與錄音,去河邊找鬼窍帝。 笑死努潘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疯坤,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼报慕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了压怠?” 一聲冷哼從身側(cè)響起眠冈,我...
    開(kāi)封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菌瘫,沒(méi)想到半個(gè)月后蜗顽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡雨让,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年雇盖,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栖忠。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡崔挖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庵寞,到底是詐尸還是另有隱情狸相,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布皇帮,位于F島的核電站卷哩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏属拾。R本人自食惡果不足惜将谊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望渐白。 院中可真熱鬧尊浓,春花似錦、人聲如沸纯衍。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)襟诸。三九已至瓦堵,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歌亲,已是汗流浹背菇用。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留陷揪,地道東北人惋鸥。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓杂穷,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親卦绣。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耐量,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

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