Object_C 中的通知 iOS

通知(Notification)是一种发送给一个或者多个观察者,用来通知其在程序中发生了某个时间的消息。通知机制遵循的时一种广播的模式。它是一种程序中时间的发起者或者是处理这和其余想要知道该时间的对象的沟通的一种方式。消息的接收者,也就是观察者响应该时间来变换本身的UI、行为或是状态。发送通知的对象没有必要知道这些观察者都是谁。所以,通知是一种在程序中能够得到高校协做同时保持高内聚性的机制。他减小了程序中对象相互之间的强依赖性。并发

通知机制的核心就是一个进程中单一实例的对象,被叫作通知中心(NSNotificationCenter)。当一个对象发布一个通知时,通知就会先被发布到通知中心。通知中心的做用至关因而交流所,做为通知的广播中心。程序中其余须要感知时间的对象经过向通知中心注册就能够达到在时间发生时被通知中心及时通知获得目的。通知中心是能够以同步的方式向其观察者发送通知,也是能够经过使用通知队列(NSNotificationQueue)来异步地发送通知。框架

iOS中,通知分为系统通知、自定义通知、本地通知、推送通知。异步

1.系统通知:系统通知是cocoa框架定义好的通知,开发者只须要在通知中心区注册通知,至于何时发送通知,由系统决定。系统定义好了这些通知的发送时机,通常由通知的名称体现。post

下面是iOS系统通知的示例代码:spa

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinish:)name:UIKeyboardWillShowNotification object:nil];

以上代码中:code

[NSNotificationCenter defaultCenter]是建立一个通知中心对象,它是一个单例。orm

addObserver:观察者。server

selector:方法选择器,当接收到通知时执行()内的方法。对象

name:所要监听的关键词(由系统定义)。队列

object:发送通知的对象,这里置为nil;

用完系统通知后,要在通知中心移除。通常放在dealloc方法(对象销毁时自动执行的方法)中移除(重写dealloc方法),也能够放在须要的地方移除。

代码示例:

-(void)dealloc{
    [[NSNotificationCenter defaultCenter]removeObserver:self name:UIKeyboardWillShowNotification object:nil];
}

(重写dealloc方法,在对象销毁时从通知中心移除名为“UIKeyboardWillShowNotification”的系统通知)

2.自定义通知

自定义通知是指开发人员本身来定义通知。自定义通知的通常步骤:

  1.注册监听者。

  2.建立并发送通知。

  3.移除监听者。

其中,第一步和第三步与系统通知的使用方法是同样的,不一样的是系统通知是系统发送的,自定义通知是开发者自定义发送的。

示例代码:

  // 建立并发送通知

[[NSNotificationCenter defaultCenter]postNotificationName:@"News" object:nil userInfo:@{}];

  以上代码中:

Name:要发送的通知的名字;

object:发送通知的对象,这里置为nil;

userInfo:要发送的通知的内容,字典形式。

同系统通知同样,使用完毕后要在对象销毁时或者在须要的地方从通知中心移除。

3.本地通知

 // 待添加

4.推送通知

// 待添加 

通知和KVO的区别:

KVO只能监听属性的变化,经过NSString类型的属性名来实现。实现了自动监听,当属性值变化是,会自动通知观察者,再也不添加代码了。可是观察者得持有被观察者的引用,以便被观察者注册观察者,耦合性过高,不利于代码的维护。

NSNotificatin比较灵活,能够监听的内容不局限于属性的变化,还能够对多种多样的状态变化进行监听,监听范围广,使用也更灵活。可是需呀被观察者手动发送通知,观察者注册监听后才能进行响应,比KVO多了发送通知的一部。可是注册监听不须要被观察者的引用,没有耦合性,利于代码维护。

使用通知时常见的错误:

1.通知名称填写不正确,能够在.pch文件中声明宏,以便填写名称时自动填写。

2.忘记从通知中心移除。

相关文章
相关标签/搜索