iOS 通知中心 NSNotificationCenter

iOS开发中,每个app都有一个通知中心,通知中心可以发送和接收通知。

在使用通知中心 NSNotificationCenter之前,先了解一下通知 NSNotification。

NSNotification 可以理解为消息对象,包含三个成员变量,如下:

@property (readonly, copy) NSString *name;
@property (nullable, readonly, retain) id object;
@property (nullable, readonly, copy) NSDictionary *userInfo;

name:通知的名称

object:针对某一个对象的通知

userInfo:字典类型,主要是用来传递参数

创建并初始化一个NSNotification可以使用下面的方法:

+ (instancetype)notificationWithName:(NSString *)aName object:(nullable id)anObject;
+ (instancetype)notificationWithName:(NSString *)aName object:(nullable id)anObject userInfo:(nullable NSDictionary *)aUserInfo;

NSNotificationCenter 通知中心,是一个单例。只能使用  [NSNotificationCenter defaultCenter] 获取通知中心对象。

发送通知可以使用下面的方法:

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

或者:

NSDictionary *userInfo = @{@"name":@"John",@"age":@"15"}; NSNotification *notice = [NSNotification notificationWithName:@"testNotification" object:nil userInfo:userInfo];
 [[NSNotificationCenter defaultCenter] postNotification:notice];

添加一个观察者的方法(可以理解成在某个观察者中注册通知):

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

有四个参数:第一个参数是观察者,也就是谁注册这个通知;第二个参数是当接收到通知时的回调函数;第三个参数是通知的名称,通知名是区分各个通知的唯一标识;第四个参数是接收哪个对象发过来的通知,如果为nil,则接收任何对象发过来的该通知。

移除观察者,两种方法:

- (void)removeObserver:(id)observer;
- (void)removeObserver:(id)observer name:(NSString *)aName object:(id)anObject;

NSNotificationCenter 的使用举例如下:

发送通知(两种方法):

- (void)btnClicked
{
    //[[NSNotificationCenter defaultCenter] postNotificationName:@"testNotification" object:nil];

    NSDictionary *userInfo = @{@"name":@"John",@"age":@"15"};

    NSNotification *notice = [NSNotification notificationWithName:@"testNotification" object:nil userInfo:userInfo];
    [[NSNotificationCenter defaultCenter] postNotification:notice];

}

增加观察者:

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

回调函数(可以利用回调函数的参数 notification获得该通知的信息,比如name、object、参数):

- (void)haveNoti:(NSNotification *)notification
{
    NSLog(@"name = %@",[notification name]);

    NSDictionary *userInfo = [notification userInfo];
    NSLog(@"info = %@",userInfo);
}

针对某一个特定对象的通知的使用场景:

UITextField,比如说我们要监听UITextField 里面内容的变化,此时可以注册下面的通知:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(searchBarTextChange) name:UITextFieldTextDidChangeNotification object:self.searchBar];

self.searchBar 是 UITextField 类型。

时间: 2024-10-19 09:13:03

iOS 通知中心 NSNotificationCenter的相关文章

iOS通知中心 NSNotificationCenter详解

NSNotificationCenter的适用场景,原理机制,使用步骤等. 通知中心的使用顺序:先确保注册了观察者,因为发送通知是一瞬间的事,如果没有注册观察者,发送通知后再注册是不会收到的. 总结:通知只会发送给当前监听着的对象. 代码 //注册通知  在关心该通知的页面注册监听 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tongzhi:) name:@"tongzhi" obj

iOS开发UI篇—通知中心(NSNotificationCenter)

一.通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象 之间的消息通信 •任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时) 二.通知(NSNotification) • 一个完整的通知一般包含3个属性: - (NSString *)name;// 通知的名称

iOS开发UI篇章之通知中心(NSNotificationCenter)

一.通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象 之间的消息通信 • 任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感 兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时) 二.通知(NSNotification) •一个完整的通知一般包含3个属性: Ø- (NSString *)name; // 通知的

IOS开发 - 通知中心(NSNotificationCenter)

通知中心(NSNotificationCenter) 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 通知(NSNotification) 一个完整的通知一般包含3个属性: - (NSString *)name; //通知的名称 -

iOS通知中心

iOS开发中的传送消息机制总的来说细分为三大类: 本地通知 推送通知 通知中心 三者之间并没有什么直接性质的联系,通知中心是向应用程序中注册某个观察者的所有对象广播消息,通过通知中心可以很好的协调不同对象之间的消息通信. 注意: 每一个应用程序都有且只有一个通知中心(NSNotificationCenter)实例 代理和通知中心都是协调各个对象之间进行消息通信,通知中心在功能上与代理有些类似,二者在选择时有什么区分? 代理对应的关系的一对一的关系,而通知是一对多的关系,所以在遇到需要一处改变引起

iOS通知中心

iOS通知中心 它是iOS程序内部的一种消息广播机制,通过它,可以实现无引用关系的对象之间的通信.通知中心他是基于观察者模式,它只能进行程序内部通信,不能跨应用程序进程通信. 当通知中心接受到消息后会根据设置,将消息发送给订阅者,这里的订阅者可以有多个 通知中心原理 看完上图你应该明白通知中心所做的事情了吧, 接下来我们就来看看通知中心. 首先必须了解2个类: // 这个类用来传递发送通知过程中传递信息的载体 NSNotification // 这是iOS中通知中心的灵魂, 由该类实现了观察者模

第二十六篇:通知中心 NSNotificationCenter

1.通知中心(NSNotificationCenter) ?每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 ?任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知(NSNotification) >一个完整的通知一般包含3个属性: - (NSString*)name; // 通

通知中心(NSNotificationCenter)

•通知机制 •掌握 •通知的发布 • •通知的监听 • •通知的移除 •通知中心(NSNotificationCenter) •每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 •任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 •通知(NSNotification) •一个完整的通知

第二十一讲.UICollectionView(集合视图)以及瀑布流效果, 通知中心(NSNotificationCenter).

一.集合视图(UICollectionView) 1.集合视图的概念 2.如何创建 3.集合视图的布局UICollectionViewFlowLayout 4.自定义cell和 布局协议UICollectionViewDelegateFlowLayout 使用时cell一般选择自定义,而在布局时候要使用代理. UICollectionView的基本使用示例代码分析: #import "ViewController.h" #import "CollectionReusableV