通知機制

通知機制

基本概念

通知中心(NSNotificationCenter)

每一個應(yīng)用程序都有一個通知中心(NSNotificationCenter)實例蚊夫,專門負責協(xié)助不同對象之間的消息通信 任何一個對象都可以向通知中心發(fā)布通知(NSNotification),描述自己在做什么降盹。其他感興趣的對象(Observer)可以申請在某個特定通知發(fā)布時(或在某個特定的對象發(fā)布通知時)收到這個通知


通知

一個完整的通知一般包含3個屬性:

- (NSString*)name;// 通知的名稱- (id)object;// 通知發(fā)布者(是誰要發(fā)布通知)- (NSDictionary*)userInfo;// 一些額外的信息(通知發(fā)布者傳遞給通知接收者的信息內(nèi)容)

初始化一個通知(NSNotification)對象

+ (instancetype)notificationWithName:(NSString*)aName object:(id)anObject;

+ (instancetype)notificationWithName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;

- (instancetype)initWithName:(NSString*)name object:(id)object userInfo:(NSDictionary*)userInfo;

通知的3大步驟

1.發(fā)布通知

通知中心(NSNotificationCenter)提供了相應(yīng)的方法來幫助發(fā)布通知- (void)postNotification:(NSNotification*)notification;

發(fā)布一個notification通知断医,可在notification對象中設(shè)置通知的名稱、通知發(fā)布者、額外信息等

- (void)postNotificationName:(NSString*)aName object:(id)anObject;發(fā)布一個名稱為aName的通知届谈,anObject為這個通知的發(fā)布者

- (void)postNotificationName:(NSString*)aName object:(id)anObject userInfo:(NSDictionary*)aUserInfo;發(fā)布一個名稱為aName的通知枯夜,anObject為這個通知的發(fā)布者,aUserInfo為額外信息

2.注冊監(jiān)聽器

通知中心(NSNotificationCenter)提供了方法來注冊一個監(jiān)聽通知的監(jiān)聽器(Observer)- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString*)aName object:(id)anObject;observer:監(jiān)聽器疼约,即誰要接收這個通知aSelector:收到通知后卤档,回調(diào)監(jiān)聽器的這個方法,并且把通知對象當做參數(shù)傳入aName:通知的名稱程剥。如果為nil劝枣,那么無論通知的名稱是什么,監(jiān)聽器都能收到這個通知anObject:通知發(fā)布者织鲸。如果為anObject和aName都為nil舔腾,監(jiān)聽器都收到所有的通知

- (id)addObserverForName:(NSString*)name object:(id)obj queue:(NSOperationQueue*)queue usingBlock:(void(^)(NSNotification*note))block;name:通知的名稱obj:通知發(fā)布者block:收到對應(yīng)的通知時,會回調(diào)這個blockqueue:決定了block在哪個操作隊列中執(zhí)行搂擦,如果傳nil稳诚,默認在當前操作隊列中同步執(zhí)行

3.取消通知監(jiān)聽器

通知中心不會保留(retain)監(jiān)聽器對象,在通知中心注冊過的對象瀑踢,必須在該對象釋放前取消注冊扳还。否則,當相應(yīng)的通知再次出現(xiàn)時橱夭,通知中心仍然會向該監(jiān)聽器發(fā)送消息氨距。因為相應(yīng)的監(jiān)聽器對象已經(jīng)被釋放了,所以可能會導(dǎo)致應(yīng)用崩潰通知中心提供了相應(yīng)的方法來取消注冊監(jiān)聽器- (void)removeObserver:(id)observer;- (void)removeObserver:(id)observer name:(NSString*)aName object:(id)anObject;一般在監(jiān)聽器銷毀之前取消注冊(如在監(jiān)聽器中加入下列代碼):- (void)dealloc {//[super dealloc];? 非ARC中需要調(diào)用此句[[NSNotificationCenterdefaultCenter] removeObserver:self];}


UIDevice通知

UIDevice類提供了一個單粒對象棘劣,它代表著設(shè)備俏让,通過它可以獲得一些設(shè)備相關(guān)的信息,比如電池電量值(batteryLevel)茬暇、電池狀態(tài)(batteryState)首昔、設(shè)備的類型(model,比如iPod糙俗、iPhone等)勒奇、設(shè)備的系統(tǒng)(systemVersion)

通過[UIDevice currentDevice]可以獲取這個單粒對象

UIDevice對象會不間斷地發(fā)布一些通知,下列是UIDevice對象所發(fā)布通知的名稱常量:

UIDeviceOrientationDidChangeNotification// 設(shè)備旋轉(zhuǎn)UIDeviceBatteryStateDidChangeNotification// 電池狀態(tài)改變UIDeviceBatteryLevelDidChangeNotification// 電池電量改變UIDeviceProximityStateDidChangeNotification// 近距離傳感器(比如設(shè)備貼近了使用者的臉部)


鍵盤通知

我們經(jīng)常需要在鍵盤彈出或者隱藏的時候做一些特定的操作,因此需要監(jiān)聽鍵盤的狀態(tài)

鍵盤狀態(tài)改變的時候,系統(tǒng)會發(fā)出一些特定的通知UIKeyboardWillShowNotification// 鍵盤即將顯示UIKeyboardDidShowNotification// 鍵盤顯示完畢UIKeyboardWillHideNotification// 鍵盤即將隱藏UIKeyboardDidHideNotification// 鍵盤隱藏完畢UIKeyboardWillChangeFrameNotification// 鍵盤的位置尺寸即將發(fā)生改變UIKeyboardDidChangeFrameNotification// 鍵盤的位置尺寸改變完畢系統(tǒng)發(fā)出鍵盤通知時,會附帶一下跟鍵盤有關(guān)的額外信息(字典),字典常見的key如下:UIKeyboardFrameBeginUserInfoKey// 鍵盤剛開始的frameUIKeyboardFrameEndUserInfoKey// 鍵盤最終的frame(動畫執(zhí)行完畢后)UIKeyboardAnimationDurationUserInfoKey// 鍵盤動畫的時間UIKeyboardAnimationCurveUserInfoKey// 鍵盤動畫的執(zhí)行節(jié)奏(快慢)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末巧骚,一起剝皮案震驚了整個濱河市赊颠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌网缝,老刑警劉巖巨税,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粉臊,居然都是意外死亡草添,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門扼仲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來远寸,“玉大人抄淑,你說我怎么就攤上這事〕酆螅” “怎么了肆资?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長灶芝。 經(jīng)常有香客問我郑原,道長,這世上最難降的妖魔是什么夜涕? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任犯犁,我火速辦了婚禮,結(jié)果婚禮上女器,老公的妹妹穿的比我還像新娘酸役。我一直安慰自己,他們只是感情好驾胆,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布涣澡。 她就那樣靜靜地躺著,像睡著了一般丧诺。 火紅的嫁衣襯著肌膚如雪入桂。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天锅必,我揣著相機與錄音事格,去河邊找鬼惕艳。 笑死搞隐,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的远搪。 我是一名探鬼主播劣纲,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼键闺,長吁一口氣:“原來是場噩夢啊……” “哼缩筛!你這毒婦竟也來了柱衔?” 一聲冷哼從身側(cè)響起栽燕,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岳悟,失蹤者是張志新(化名)和其女友劉穎格遭,沒想到半個月后淆珊,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體突勇,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡涮因,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年废睦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片养泡。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡嗜湃,死狀恐怖奈应,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情购披,我是刑警寧澤杖挣,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站刚陡,受9級特大地震影響惩妇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜筐乳,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一屿附、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧哥童,春花似錦挺份、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至朵你,卻和暖如春各聘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背抡医。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工躲因, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忌傻。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓大脉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親水孩。 傳聞我的和親對象是個殘疾皇子镰矿,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 每一個應(yīng)用程序都有一個通知中心(NSNotificationCenter)實例,專門負責協(xié)助不同對象之間的消息...
    藍心兒的藍色之旅閱讀 311評論 0 0
  • 每一個應(yīng)用程序都有一個通知中心(NSNotificationCenter)實例俘种,專門負責協(xié)助不同對象之間的消息通信...
    YANGGQ閱讀 707評論 0 3
  • 通知中心(NSNotificationCenter) 每一個應(yīng)用程序都有一個通知中心(NSNotification...
    GryllsNSTimer閱讀 360評論 1 1
  • 通知機制 iOS程序內(nèi)部通信機制.通知機制和委托機制不同,前者是一對多的對象之間的通信,后者是一對一的對象之間的通...
    果啤閱讀 1,471評論 0 2
  • 代理的使用步驟 定義一份代理協(xié)議協(xié)議名字的格式一般是:類名 + Delegate比如UITableViewDele...
    Yuann閱讀 287評論 0 1