iOS 本地通知NSNotificationcenter --- iOS 開發
iOS 有一種叫做通知的產生時間的功能.可以在一定的條件下處罰響應事件.通過nsnotificationcenter 獲取通知物件,註冊並且使用通知.物件導向的設計思想是把行為方法封裝在一個物件中,以用來增加程式碼的複用性.這是這種分散的分裝,增加了物件之間的相互關聯,總是有很多的物件需要彼此的禮教以及相互操作.
一個簡單的例子說明這種互動產生的物件之間的相互依賴:
有一個列表框,沒當列表框的某一項被選中時會彈出一個對話方塊,對話方塊包含一個或者多個輸入框,在輸入完畢輸入的文字要更新要再列表中顯示,文字描述有點囉嗦.大家可以以qq微新好友列表為參考.
只是這幾個ui空間之間互動邏輯九如此的麻煩與複雜.這種物件之間的相互關聯與我們有的高度複用,高內聚低耦合的思想是不相符合的.並且ui控制元件之間勢必需要相互瞭解操作.情況九回變得越來越難以控制.最終使得整個程式變得那一複用與維護.
通過通知中心:NSNotificationCenter可以很簡單的解覺這個問題.在其他的開發中也回用相同的問題,這種處理機制的設計模式被稱作為中介模式.每一個應用程式中都有一個通知中心的例項,專門負責協助不同物件之間的訊息通知.任何一個物件都可以向通知中線傳送通知(NSNOtification),描述自己在左什麼.其他感興趣的物件(observer)可以接受到通知,發生相應的變化.
通知中心nsnotificationcenter提供了方法來註冊一個監聽器(observer)
- (void)addObserver:(id)observer selector:(SEL)aSelector name:(NSString *)aName object:(id)anObject;
//observer :監聽器,即誰要接受這個通知
aselector 收到通知後,回撥監聽器的這個方法,並把通知物件當做單引數出入
aname 通知的名稱,若果為nil 那麼無論通知名稱是什麼,監聽器都能夠收到這個通知
//anObjict : 通知釋出者.如果為ANObjiect 和ANAMEWI 都為nil,監聽器都收到所以的通知
//name 通知的名稱
// obj: 通知的釋出者
//block 收到對應的通知是,會回撥這個
//blockqueue 決定了block 子那個操作佇列中執行.日過傳nil.預設在當前的操作佇列中同步執行通知
一個完整的通知一般包含三個屬性
-(nsstring *)name //通知的名稱
- (id)objict //釋出者(是誰要釋出)
-(nsdictionary)userinfo //一些額外的資訊(通過釋出者傳遞接受者的資訊內容)
初始化一個(Nsnotification)物件
釋出通知:
一下以一個例子威力:
uiapplocation * application = [uiapplication sharedapplicaton];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:)name:UIApplicationWillResignActiveNotification object:application];
以上程式碼註冊了一個通知,addObserver是接收通知的物件,通常為self,selector是接收到通知後要執行的操作,可以理解為操作事件,name是通知的名稱,這裡使用的是UIApplicationWillResignActiveNotification,意思是應用程式將要進入後臺之前,object限定只接收來自哪些物件的通知,通常設為nil,你也可以寫某些方法,讓這個感興趣的觀察者執行某些方法.
-(void)applicationWillResignActive:(NSNotification *)notification //注: 這個方法可以寫其他很多的響應方法(根據你自己的需求)
{
}
在上面這個方法中實現響應的操作就可以了。
這個過程就是當應用程式將要進入後臺前(按下Home鍵)觸發通知,然後執行applicationWillResignActive:notification方法完成一些操作。這個例子大家也許沒有明白通知的註冊過程,下面一個例子大家好好看哦:
appdelegata.m 中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(callBack)
name: @"aa"
object: nil];
ViewController * view = [[ViewController alloc]init];
self.window.rootViewController = view;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (void)callBack{
NSLog(@"this is Notification.");
}
viewconterllor中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(callBack)
name: @"aa"
object: nil];
ViewController * view = [[ViewController alloc]init];
self.window.rootViewController = view;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (void)callBack{
NSLog(@"this is Notification.");
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIButton * button = [[UIButton alloc]initWithFrame:CGRectMake(100, 100, 100, 100)];
button.backgroundColor = [UIColor redColor];
[button addTarget:self action:@selector(getNotofocation) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)getNotofocation{
NSLog(@"get it.");
//發出通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"aa"object:self];
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(callBack)
name: @"aa"
object: nil];
ViewController * view = [[ViewController alloc]init];
self.window.rootViewController = view;
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
return YES;
}
- (void)callBack{
NSLog(@"this is Notification.");
}
相關文章
- iOS 通知中心(NSNotificationCenter)iOS
- iOS本地通知(推送)iOS
- iOS開發基礎篇--NSNotificationCenter使用小結iOS
- iOS 本地通知那些事iOS
- iOS開發-鍵盤通知iOS
- iOS 本地通知(未完待續)iOS
- ios推送:本地通知UILocalNotificationiOSUI
- iOS - 10以後的本地通知iOS
- iOS專案開發實戰——實現蘋果本地訊息通知推送服務iOS蘋果
- 【iOS開發】如何將Array儲存在本地iOS
- IOS學習之NSNotificationCenter訊息機制iOS
- iOS 遠端通知iOS
- [iOS] [OC] NSNotificationCenter 進階及自定義(附原始碼)iOS原始碼
- iOS 本地推送iOS
- iOS開發--通知,代理,KVO的區別,以及通知的多執行緒問題iOS執行緒
- iOS 通知擴充套件iOS套件
- nagios mail告警通知iOSAI
- iOS ANCS 通知服務iOS
- iOS開發系列--IOS程式開發概覽iOS
- iOS 開發iOS
- iOS開發iOS
- 【iOS開發】iOS 動畫詳解iOS動畫
- iOS中通知非同步?同步?iOS非同步
- 玩轉iOS開發:iOS中的GCD開發(一)iOSGC
- 玩轉iOS開發:iOS中的GCD開發(三)iOSGC
- 玩轉iOS開發:iOS中的GCD開發(二)iOSGC
- iOS開發:UIAlertViewiOSUIView
- iOS 開發薪水iOS
- iOS開發-沙箱iOS
- 【iOS開發】whoseviewisnotinthewindowhierarchyiOSView
- iOS開發-MVCiOSMVC
- iOS開發- RunLoopiOSOOP
- 玩轉iOS開發:iOS中的NSOperation開發(一)iOS
- 玩轉iOS開發:iOS中的NSOperation開發(二)iOS
- iOS判斷使用者是否開啟APP通知開關iOSAPP
- iOS 通知擴充套件外掛iOS套件
- iOS 通知還能這麼玩?iOS
- iOS10推送通知適配iOS