IOS中的通知NSNotification
類似于Android中的廣播接收者發送者
1.一般完整的通知包含三個屬性
1 -(NSString *)name ;//通知的名稱 2 -(id)object ;//通知發布者(是誰要發布通知) 3 -(NSDictionary *)userInfo;//一些額外的信息(通知發布者傳遞給通知接收者的信息內容)
2.初始化一個通知(NSnotification)對象
1 +(instancetype)notificationWithName:(NSString *)aName object:(id)anObject; 2 +(instancetype)notificationWithName:(NSString *)aName object:(id)anObject userInfo:(NSDictionary *)aUserInfo; 3 -(instancetype) initWithName:(NSString *)name object:(id)object userInfo:(NSDictionary *)userInfo;
3.發布一個通知
1 //發布一個notification通知,可在notification對象中設置 通知的名稱\通知發布者\額外信息 等 2 -(void)postNotification:(NSNotification *)notification; 3 4 //發布一個名稱為aName的通知,anObject為這個通知的發布者 5 -(void)postNotificationNmae:(NSString *)aName object:(id)anObject; 6 7 //發布一個名稱為aName的通知,anObject 為這個通知的發布者,aUserInfo為額外的信息 8 -(void)postNotificationName:(NSString *)aName object:(id)anObject userInfo :(NSDictionary *)aUserInfo;
4.注冊一個監聽通知的監聽器(Observer)
1 方法一: 2 observer:監聽器,即誰要接收這個通知 3 aSelector:收到通知后,回調監聽器的這個方法,并且把通知對象當做參數傳入 4 aName:通知的名稱,如果為nil,那么無論通知的名稱是什么,監聽器都能收到這個通知 5 anObject:通知發布者.如果為anObject和aName都為nil,監聽器都收到所有的通知 6 -(void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject; 7 8 9 方法二: 10 name:通知的名稱 11 obj:通知的發布者 12 block:收到對應的通知時,會回調這個block 13 queue:注定了block在哪個操作隊列中執行,如果傳nil,默認在當前操作隊列中同步執行 14 -(id)addObserverForName:(NSString *)name object:(id)obj queue:(NSOperationQueue *)queue usingBlock:(void(^)(NSNotification *note))block;
5.取消注冊監聽
1 通知中心不會保留(retain)監聽器對象,在通知中心注冊過的對象,必須在該對象釋放前取消注冊.否則,當相應的通知再次出現時,通知中心仍然會向該監聽器發送信息,而由于相應的注冊對象已經被釋放,所以可能會導致應用崩潰 2 3 取消注冊監聽的方法 4 5 -(void)removeObserver:(id)observer; 6 -(void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject; 7 8 一般在監聽器銷毀之前取消注冊(如在監聽器中加入下列代碼): 9 -(void)dealloc{ 10 //[super dealloc]; 非ARC中需要調用此句 11 [[NSNotificationCenter defaultCenter]removeObserver:self]; 12 }
6.UIDevice通知
1 //UIDevice類提供了一個單例對象,它代表著設備,通過它可以獲得一些設備相關的信息,比如電池電量值(batterylevel)、電池狀態(batteryState)、設備的類型(model,比如 ipad、iphone等)、設備的系統(systemVersion) 2 3 通過[UIDevice currentDevice]可以獲取這個單例對象 4 5 UIDevice對象會不間斷地發布一些通知,下列是UIDevice對象所發布通知的名稱常量: 6 UIDeviceOrientationDidChangeNotification //設備選擇 7 UIDeviceBatteryStateDidChangeNotification//電池狀態改變 8 UIDeviceBatteryLevelDidChangeNotification//電池電量改變 9 UIDeviceProximityStateDidChangeNotification//近距離傳感器(比如設備貼近了使用者的臉部)
7.鍵盤通知
1 //我們經常需要在鍵盤彈出或者隱藏的時候做一些特定的操作,因此需要監聽鍵盤的狀態 2 3 //鍵盤狀態改變的時候,系統會發出一些特定的通知 4 5 UIKeyboardWillShowNotification //鍵盤即將顯示 6 UIKeyboardDidShowNotification//鍵盤顯示完畢 7 UIKeyboardWillHideNotification //鍵盤即將隱藏 8 UIKeyboardDidHideNotification //鍵盤隱藏完畢 9 UIKeyboardWillChangeFrameNotification //鍵盤的位置尺寸即將發生改變 10 UIKeyboardDidChangeFrameNotification //鍵盤的位置尺寸改變完畢 11 12 13 //系統發出鍵盤通知時,會附帶一下跟鍵盤有關的額外信息(字典),字典常見的key如下: 14 UIKeyboardFrameBeginUserInfoKey //鍵盤剛開始的frame 15 UIKeyboardFrameEndUserInfoKey //鍵盤最終的frame(動畫執行完畢后) 16 UIKeyboardAnimationDurationUserInfoKey //鍵盤動畫的時間 17 UIKeyboardAnimationCurveUserInfoKey //鍵盤動畫的執行節奏(快慢)
代理與通知
1 代理與通知都是將一些信息發送給外面,然后由其它對象進行一些操作, 2 但是代理只能是一對一的關系 3 而通知可以多對多

浙公網安備 33010602011771號