iOS 通知中心 NSNotificationCenter & NSNotification
通知中心是 Foundation 框架的一個子系統,它嚮應用程式中註冊為某個事件觀察者的所有物件廣播訊息(即通知)。(從程式設計角度而言,它是 NSNotificationCenter
類的例項)。該事件可以是發生在應用程式中的任何事情,例如進入後臺狀態,或者使用者開始在文字欄中鍵入。通知是告訴觀察者,事件已經發生或即將發生,因此讓觀察者有機會以合適的方式響應。通過通知中心來傳播通知,是增加應用程式物件間合作和內聚力的一種途徑。
任何物件都可以觀察通知,但要做到這一點,該物件必須註冊,以接收通知。在註冊時,它必須指定選擇器,以確定由通知傳送所呼叫的方法;方法簽名必須只有一個引數:通知物件。註冊後,觀察者也可以指定釋出物件。
(以上是官方文件中的解釋)
------------------------------------------華麗的分割線----------------------------------------------------------
通知中心包括兩個重要的類:
(1)NSNotificationCenter:
實現NSNotificationCenter的原理是一個觀察者模式,獲得NSNotificationCenter的方法只有一種,那就是[NSNotificationCenter
defaultCenter] ,通過呼叫靜態方法defaultCenter就可以獲取這個通知中心的物件了,而NSNotificationCenter是一個單例模式,而這個通知中心的物件會一直存在於一個應用的生命週期。
(2) NSNotification: 這是訊息攜帶的載體,通過它,可以把訊息內容傳遞給觀察者。
(3)一個NSNotificationCenter可以有許多的通知訊息NSNotification,對於每一個NSNotification可以有很多的觀察者Observer來接收通知。
通過上面的介紹可以知道,通過通知中心也可以實現不同類之間的引數傳遞。
注意當接受到訊息後,不想再收到訊息了,要把observer刪除remove。
下面介紹如何使用(具體解釋看文件)。
(1)NSNotification :用於建立傳遞的訊息
(2)NSNotificationCenter :用於傳送訊息Creating Notifications + notificationWithName:object: + notificationWithName:object:userInfo: Getting Notification Information – name – object – userInfo
Getting the Notification Center
+ defaultCenter
Managing Notification Observers
– addObserverForName:object:queue:usingBlock:
– addObserver:selector:name:object:
– removeObserver:
– removeObserver:name:object:
Posting Notifications
– postNotification:
– postNotificationName:object:
– postNotificationName:object:userInfo:
demo(例子中基本上涉及到以上所有的方法了):
定義了兩個類:Poster(傳送訊息)和Observer(接受訊息)
Poster.h
#import <Foundation/Foundation.h>
@interface Poster : NSObject
-(void)postMessage;
@end
Poster.m
#import "Poster.h"
@implementation Poster
-(void)postMessage{
//1.下面兩條語句等價
//二者的區別是第一條語句是直接傳送訊息內容,第二條語句先建立一個訊息,然後再發送訊息
[[NSNotificationCenter defaultCenter] postNotificationName:@"PosterOne" object:@"This is posterone!"];
// [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"PosterOne" object:@"This is posterone"]];
//2.下面兩條語句等價
//引數:userInfo --- Information about the the notification.
[[NSNotificationCenter defaultCenter] postNotificationName:@"PosterTwo" object:@"This is postertwo" userInfo:[NSDictionary dictionaryWithObject:@"value" forKey:@"key"]];
// [[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@"PosterTwo" object:@"This is postertwo" userInfo:[NSDictionary dictionaryWithObject:@"value" forKey:@"key"]]];
}
@end
Observer.h
#import <Foundation/Foundation.h>
@interface Observer : NSObject
-(void)observer;
@end
Observer.m
#import "Observer.h"
@implementation Observer
-(void)observer {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack1:) name:@"PosterOne" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack2:) name:@"PosterTwo" object:nil];
//刪除所有的observer
// [[NSNotificationCenter defaultCenter] removeObserver:self];
//刪除名字為name的observer
// [[NSNotificationCenter defaultCenter] removeObserver:self name:@"PosterOne" object:nil];
}
-(void)callBack1:(NSNotification*)notification{
NSString *nameString = [notification name];
NSString *objectString = [notification object];
NSLog(@"name = %@,object = %@",nameString,objectString);
}
-(void)callBack2:(NSNotification*)notification{
NSString *nameString = [notification name];
NSString *objectString = [notification object];
NSDictionary *dictionary = [notification userInfo];
NSLog(@"name = %@,object = %@,userInfo = %@",nameString,objectString,[dictionary objectForKey:@"key"]);
}
@end
main.m
#import <Foundation/Foundation.h>
#import "Poster.h"
#import "Observer.h"
int main(int argc, const char * argv[])
{
@autoreleasepool {
//注意這裡的順序,要先observer,然後再poster
Observer *myObserver = [[Observer alloc] init];
[myObserver observer];
Poster *poster = [[Poster alloc] init];
[poster postMessage];
}
return 0;
}
好了,大概有關的內容都差不多了吧
附:
不過有個方法
addObserverForName:object:queue:usingBlock:
還不太懂如何使用,暫時放一下,有知道了麻煩評論告訴了。相關推薦
iOS 通知中心 NSNotificationCenter & NSNotification
通知中心是 Foundation 框架的一個子系統,它嚮應用程式中註冊為某個事件觀察者的所有物件廣播訊息(即通知)。(從程式設計角度而言,它是 NSNotificationCenter 類的例項)。該事件可以是發生在應用程式中的任何事情,例如進入後臺狀態,或者使用者開始在文
iOS 通知中心 NSNotificationCenter(訊息機制)
今天專案要用到NSNotificationCenter,我喜歡叫它訊息(有的地方叫通知)。前兩天有弄過訊息推送,所以想對不瞭解的人解釋一下,ios訊息推送與這個訊息不是一回事!(我感覺他倆名字有的相似,怕有人誤會) 因為本人菜鳥一枚,所以之前弄過一次這個。但是今天要用的時候
iOS中通知中心NSNotificationCenter應用總結
iOS中通知中心NSNotificationCenter應用總結 一、瞭解幾個相關的類 1、NSNotification 這個類可以理解為一個訊息物件,其中有三個成員變數。 這個成員變數是這個訊息物件的唯一標識,用於辨別訊息物件。 @property (readonly, cop
iOS中通知中心(NSNotificationCenter)的使用總結
轉載自:https://my.oschina.net/u/2340880/blog/406163 摘要: NSNotification是IOS中一個排程訊息通知的類,採用單例模式設計,在程式中實現傳值、回撥等地方應用很廣。 iOS中通知中心NSNotificatio
關於iOS中的通知中心(NSNotificationCenter)
先說一下什麼叫通知: iOS中的通知機制又叫訊息機制,其包括2類:一類是本地通知;另一類是推送通知,也叫遠端通知.兩種通知在iOS中的表現一致,可以通過橫幅或者彈出提醒兩種形式告訴使用者,並且點選通知可以開啟應用程式,但是兩種通知的實現原理卻完全不同. 那麼
ios-通知中心原理
關於通知中心,我們應該都去發過通知以及去監聽這個通知,我們下面就做一個簡單的探析。首先我們可以先通過打斷點的方式去po [NSNotificationCenter defaultCenter]去檢視它的資訊,我們會發現有很多系統的通知在裡面,在裡面我們可以找到我們釋出的通知。
iOS開發:NSNotificationCenter,通知中心的使用
在開發過程中,使用通知的地方還是很多的,通知中心(NSNotificationCenter)實際上上一個訊息通知機制,是在程式內部提供的一種廣播機制。舉一個經典的應用場景:任意物件可以傳送通知到中心,同時任意物件也可以監聽中心傳送的通知。也就是說,把接收到的
iOS Block傳值、代理傳值、通知中心
Joker_King 關注 2016.04.18 22:17* 字數 802 閱讀 1792 評論 7 喜歡 12 在我們需
iOS 通知(NSNotification)的簡單使用
通知:NSNotification,是iOS開發中一種重要的設計模式,它的實質是程式內部提供的一種廣播機制。把接受到的訊息根據內部訊息轉發表,將訊息轉發給需要的物件。 通知這種設計模式,在開發中常用來不同類之間的通訊,也就是常說的頁面之間的傳值。當然它不僅僅只有這一種應用場
ios 通知NSNotificationCenter 的名字可否同名
最近公司招人,面試了幾個人,總是問這麼個問題, 當我建立通知時可否建立兩個同名的通知,竟沒有一個人回答說可以。 經過實測在同一個專案中可以存在多個同名的通知,最後造成的結果是建立了幾個這個通知就傳送給了各自的通知。 比如我在兩個類裡面都建立了名為test的通知, gkfdd
IOS使用本地通知(UILocalNotification)刪除應用角標小紅點不刪除通知中心內容
1.本地通知需要當應用在後臺時執行,比如放在applicationDidEnterBackground方法裡; 2.需要註冊通知 - (BOOL)application:(UIApplication
快速使用 NSNotificationCenter iOS通知
//建立一個訊息 [[NSNotificationCenterdefaultCenter] addObserver:selfselector:@selector(notice:)name:@"123"object:nil]; //傳送訊息 [[NSN
iOS 清除通知中心收到的APNS通知
下面內容轉載自:http://blog.csdn.net/zzzzzdddddxxxxx/article/details/42265393 我在測試的時候用的第一個方法就搞定了 從通知中心移除通知的三種方法: 1.將app的BadgeNumber設為0,就是ap
win10系統通知中心關閉的操作步驟
dbf -- new color 簡單 通知 com 中心 images Win10系統有很多不必要的功能,比如通知管理機制,系統接到通知就會在桌面上顯示出來,給用戶們也造成了很大的困擾。如何關閉系統通知中心呢?下面小編就來給大家解決這樣的困擾。1、組合鍵:win+R,然後
[Xcode10 實際操作]七、檔案與資料-(6 )通過通知中心,實現監聽和處理程式退出事件的功能
本文將演示通過通知中心,實現監聽和處理程式退出事件的功能。在專案導航區,開啟檢視控制器的程式碼檔案【ViewController.swift】 1 import UIKit 2 3 class ViewController: UIViewController { 4 5
[Xcode10 實際操作]七、文件與數據-(6 )通過通知中心,實現監聽和處理程序退出事件的功能
英雄 idl ide active xcod end 控制 .sh Once 本文將演示通過通知中心,實現監聽和處理程序退出事件的功能。在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】 1 import UIKit 2 3
Android 通知中心
現在看來習慣性的檢視我們的裝置上的資訊幾乎成了我們的另一種本能。幾乎每小時我們都會拿出我們的手機,看看狀態列有沒新的訊息,然後放回我們的口袋。尤其對 Android 使用者來說更是如此,因為這是他們與裝置之間的主要互動方式之一。 解鎖螢幕,讀封郵件,接受好友請求,為你的好友的簽到點個贊,隨便訪問
代理、block、通知中心傳值
1.代理 委託者.h檔案 @protocol DBDoorHoneListTabCollectionCellDelegate <NSObject> - (void)selectedItemButton:(NSInteger)index; @end @interface DBD
iOS 通知對應的方法多次執行問題
今天在優化圖片上傳的時候,因為七牛每次都只能上傳一張,所以採用了遞迴的方法,在遞迴執行完之後,發出通知,然後再將圖片名上傳給伺服器,奇怪的是我發出通知的地方只執行一次,但是註冊通知SEL方法卻會執行多次,而且是在第二次上傳的情況下,會遞增的執行這個方法。以前使用通知也沒
IOS 通知+非同步通知詳解
一、通知的基本使用 每一個應用程式都有一個通知中心,專門負責協助不同 物件之間的訊息通訊。 任何一個物件都可以向通知中心釋出通知,描述自己在做什麼。其他感興趣的物件可以申請在某個特定通知釋出時(或在某個特定的物件釋出通知時)收到這個通知。 //一個通知