IOS学习笔记之通知

1、通知的概念

    IOS系统提供了NSNotificationCenter(通知中心)设计,这种设计允许开发者以松耦合的方式实现IOS 应用内各个对象之间的通信。

    NSNotificationCneter实现了观察者模式,允许应用的不同对象之间以松耦合的方式进行通信。NSNotificationCenter就是IOS SDK为开发者实现的观察者模式,这种设计模式的示意图如图所示:

IOS学习笔记之通知_第1张图片

    NSNotificationCenter相当于一个"消息中心",首先由observer所在的对象向NSNotificationCenter进行注册,表明observer对哪些NSNotification感兴趣。在没有任何对象发送NSNotification的情况下,这些observer都处于静止状态,不会执行任何代码。只要有一个对象发送NSNotification之后,所有在NSNotificationCenter注册过的,且对该NSNotification的名称对应的observer都会被激发。

    IOS SDK 中很多对象都会发送NSNotification

    (1)当应用程序状态改变时,UIApplication会对外发送NSNotification

    (2)当键盘出现时,UIWindow会对外发送NSNotification

    (3)当UITableView选中行发生改变时,UITableView会对外发送NSNotification

      ...

    (4)查看UIKit的API文档,专门有一个分类列出该组件可能发出的NSNotification

2、通知常用的方法

    (1)获取单例模式

     [NSNotificationCenter defaultCenter];

    (2)注册监听者

    -addObserver:selector:name:object:该方法第一个参数为监听者,第二个参数selector参数用于指定监听者的监听方法,第三个参数name指定通知的名称,第四个参数object代表发送者对象(poster),如果object参数为nil,则代表用于监听任何对象发出的通知。

    (3)删除监听者

     -removeObserver:name:object:删除对指定监听者(通过name参数指定)、指定通知的监听。

    (4)发送通知

    -postNotificationName:object:该方法第一个参数指定通知的名称,第二个参数指定通知的object

3、通知的应用

     NSNotificationCenter只允许同一个程序中的不同对象之间进行通信,它们不能跨越不同的应用。

    我们可以使用NSNotificationCenter监听自定义通知,也可以使用NSNotificationCenter监听系统组件的通知。

//监听自定义消息

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveMsg:) name:@"test" object:nil];

-(void)receiveMsg:(NSNotification *)notification{

    NSLog(@"收到通知名称为:%@",notification.name);

    NSLog(@"通知传递的对象为:%@",notification.object);   

}

[[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:nil];



//监听系统消息

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

-(void)keyBoardWillShow:(NSNotification *)notification{

    NSLog(@"键盘将要弹出");

}


4、NSNotifiication的含义

    NSNotification代表Poster(请求者)与observer(监听者)之间的信息载体,该对象包含如下只读属性:

    (1)name:该属性代表通知的名称,在创建监听者时就是根据该名称进行注册的。

    (2)object:该属性代表该通知传递的对象。

    (3)userInfo:该属性是一个NSDictionary,用于携带通知的附加信息。











你可能感兴趣的:(IOS通知)