Notification通知代碼簡潔使用
阿新 • • 發佈:2018-11-15
arr 異步通知 anim level string 對象 time pre move
1、自定義發送 Notification 的使用
1.1 通知(消息)的創建 ---------------詳細介紹篇
// 不帶消息內容 NSNotification *notification1 = [NSNotification notificationWithName:@"notification1" object:self]; // 帶消息內容 NSNotification *notification2 = [NSNotification notificationWithName:@"notification2" object:self userInfo:@{@"name":_name, @"age":_age}];
1.2 發送通知
// 發送創建好的消息 [[NSNotificationCenter defaultCenter] postNotification:notification1]; // 直接發送消息,不帶消息內容 [[NSNotificationCenter defaultCenter] postNotificationName:@"notification3" object:self]; // 直接發送消息,帶消息內容 [[NSNotificationCenter defaultCenter] postNotificationName:@"notification4" object:self userInfo:@{@"name":_name, @"age":_age}];
1.3 註冊通知(觀察者)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notification1Sel) name:@"notification1" object:nil]; // 通知觸發方法,通知無內容 - (void)notification1Sel { } ---------------------------------------------------------------------------- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notification2Sel:) name:@"notification2" object:nil]; // 通知觸發方法,通知有內容 - (void)notification2Sel:(NSNotification *)notification { // 接收用戶消息內容 NSDictionary *userInfo = notification.userInfo; }
1.4 移除通知(觀察者)
// 移除此觀察者的所有通知 [[NSNotificationCenter defaultCenter] removeObserver:self]; // 移除指定名字的通知 [[NSNotificationCenter defaultCenter] removeObserver:self name:@"notification1" object:nil];
2、異步發送 Notification 的使用
2.1 發送異步通知
- (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle; - (void)enqueueNotification:(NSNotification *)notification postingStyle:(NSPostingStyle)postingStyle coalesceMask:(NSNotificationCoalescing)coalesceMask forModes:(nullable NSArray<NSString *> *)modes; 參數說明: notification:通知 postingStyle:發布方式 coalesceMask:合並方式 modes :運行循環模式,nil 表示 NSDefaultRunLoopMode NSPostingStyle :發布方式 NSPostWhenIdle = 1, :空閑時發布 NSPostASAP = 2, :盡快發布 NSPostNow = 3 :立即發布 NSNotificationCoalescing :合並方式 NSNotificationNoCoalescing = 0, :不合並 NSNotificationCoalescingOnName = 1, :按名稱合並 NSNotificationCoalescingOnSender = 2 :按發布者合並 // 創建通知 NSNotification *asyncNotification = [NSNotification notificationWithName:@"asyncNotification" object:self]; dispatch_async(dispatch_get_global_queue(0, 0), ^{ // 將通知添加到發送隊列中,發送通知 [[NSNotificationQueue defaultQueue] enqueueNotification:asyncNotification postingStyle:NSPostWhenIdle]; });
2.2 移除異步通知
- (void)dequeueNotificationsMatching:(NSNotification *)notification coalesceMask:(NSUInteger)coalesceMask; 參數說明: notification:通知 coalesceMask:合並方式 // 移除通知,不是立即發布的通知可以被移除 [[NSNotificationQueue defaultQueue] dequeueNotificationsMatching:asyncNotification coalesceMask:0];
3、系統通知的使用
3.1 UIDevice 通知
- UIDevice 對象會不間斷地發布一些通知,下列是 UIDevice 對象所發布通知的名稱常量:
UIDeviceOrientationDidChangeNotification // 設備旋轉 UIDeviceBatteryStateDidChangeNotification // 電池狀態改變 UIDeviceBatteryLevelDidChangeNotification // 電池電量改變 UIDeviceProximityStateDidChangeNotification // 近距離傳感器(比如設備貼近了使用者的臉部)
3.2 鍵盤通知
- 鍵盤狀態改變的時候,系統會發出一些特定的通知:
UIKeyboardWillShowNotification // 鍵盤即將顯示 UIKeyboardDidShowNotification // 鍵盤顯示完畢 UIKeyboardWillHideNotification // 鍵盤即將隱藏 UIKeyboardDidHideNotification // 鍵盤隱藏完畢 UIKeyboardWillChangeFrameNotification // 鍵盤的位置尺寸即將發生改變 UIKeyboardDidChangeFrameNotification // 鍵盤的位置尺寸改變完畢
- 系統發出鍵盤通知時,會附帶一下跟鍵盤有關的額外信息(字典),字典常見的 key 如下:
UIKeyboardFrameBeginUserInfoKey // 鍵盤剛開始的 frame UIKeyboardFrameEndUserInfoKey // 鍵盤最終的 frame(動畫執行完畢後) UIKeyboardAnimationDurationUserInfoKey // 鍵盤動畫的時間 UIKeyboardAnimationCurveUserInfoKey // 鍵盤動畫的執行節奏(快慢)
3.3系統發送 Notification 的使用
- 一般在監聽器銷毀之前取消註冊(如在監聽器中加入下列代碼):
- (void)dealloc { // [super dealloc]; // 非 ARC 中需要調用此句 [[NSNotificationCenter defaultCenter] removeObserver:self]; }
- 在註冊、移除通知時,通知名稱標示(aName)使用系統定義的標示。
- 註冊通知(觀察者)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playFinished) name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
- 移除通知(觀察者)
[[NSNotificationCenter defaultCenter] removeObserver:self name:AVPlayerItemDidPlayToEndTimeNotification object:nil];
Notification通知代碼簡潔使用