iOS---NSNotification使用解析

原创 2016年08月30日 14:53:40

一、使用步骤
使用NSNotification很简单, 只要三步
1、添加观察者 在需要的地方注册要观察的通知

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

2、发送通知 在某地方发送通知

NSDictionary *dict =[[NSDictionary alloc] initWithObjectsAndKeys:self.userNameTextField.text, @"userNameKey", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:@"userName" object:self userInfo:dict];

3、移除观察者 移除通知

[[NSNotificationCenter defaultCenter] removeObserver:@"userName"];

二、参数解析

    1、[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"userName" object:nil];
    参数说明:   
            1)观察者,self代表本控制器
            2)接收到通知后调用的方法 @selector(update:)
            3)通知名称 @"userName"
            4)接收哪个发送者的通知。 nil代表接收所有发送者的通知
    2、[[NSNotificationCenter defaultCenter] postNotificationName:@"userName" object:self userInfo:dict];
    参数说明:
            1)通知名称 @"userName"
            2)通知发送者 self
            3)附带的信息 dict(如需要传的数据)
 3、[[NSNotificationCenter defaultCenter] removeObserver:@"userName"];
    参数说明:
            1)通知名称 @"userName"

总结:由此可见都需要通知名称,而且都一样,为了避免通知名称错误,可以写成宏。

三、注意事项
1、注册了观察通知的控制器就要移动要观察的通知。这是因为,当控制器因为某些原因比如内存问题而被销毁的时候,通知中心被注册的该通知还是存在的。而当其他有地方发送该通知的时候,通知中心会继续转发,但是转发的对象已经不存在了,这时候就会crash了。所有有添加就要有移除。

2、有些可能习惯在viewWillAppear和viewWillDisappear方法中配对使用,

- (void)viewWillAppear:(BOOL)animated
 {
 [super viewWillAppear:animated];

 // 注册通知
 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update:) name:@"userName1" object:nil];
 }

 - (void)viewWillDisappear:(BOOL)animated
 {
 [super viewWillDisappear:animated];
 [[NSNotificationCenter defaultCenter] removeObserver:@"userName1"];
 }

不是说不行,但是这两个方法属于会被经常调用的方法,比如左滑右滑的时候会重复调用,还是要多考虑一下业务逻辑,避免不要的坑,
所以建议在viewDidLoad中注册通知,在dealloc中移除通知 (注:在ARC模式下 dealloc不需要 [super dealloc])

- (void)dealloc
{
    [[NSNotificationCenter defaultCenter] removeObserver:@"userName"];
}

3、通知使用比较简单,适用场景 1对多模式 发出一个通知,多个对象监听。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS开发学习专题-基础知识(五) NSDate时间 NSUserDefaults本地存储 NSNotification系统通知的详细使用方式

本文主要讲解的是 NSDate时间、NSUserDefaults本地存储、NSNotification系统通知的详细使用方式,也是NS系列基础知识的最后一篇文章 文章是博主原创,转载请标明出处 NSU...

iOS NSNotification的使用(1)

如果在一个类中想要执行另一个类中的方法可以使用通知 1.创建一个通知对象:使用notificationWithName:object: 或者 notificationWithName:object:u...

iOS NSNotification的使用 (又学一遍,还有n遍)

学一次会用,再学一次懂,再学一次精通,沉淀下去,踏踏实实,别骗自己,将来会更璀璨!   如果在一个类中想要执行另一个类中的方法可以使用通知 1.创建一个通知对象:使用notificationW...

最详细的IOS NSNotification通知解析

太多理论性的东西就不说了,就说一个疑惑,三个个主意点。一个疑惑就是我们在UIViewController中注册的通知观察者,不需要我们在UIViewController中手动移除,系统也会帮助我们自动...

iOS 通知(NSNotification)的简单使用

通知:NSNotification,是iOS开发中一种重要的设计模式,它的实质是程序内部提供的一种广播机制。把接受到的消息根据内部消息转发表,将消息转发给需要的对象。 通知这种设计模式,在开发中常用来...

iOS NSNotification的使用

如果在一个类中想要执行另一个类中的方法可以使用通知 1.创建一个通知对象:使用notificationWithName:object: 或者 notificationWithName:object:...
  • dqjyong
  • dqjyong
  • 2012年06月20日 11:12
  • 110778

iOS NSNotification的使用 通知

如果在一个类中想要执行另一个类中的方法可以使用通知 1.创建一个通知对象:使用notificationWithName:object: 或者 notificationWithName:object:...

ios NSNotification通知的使用

本文转自dqjyong的  iOS NSNotification的使用 链接地址:  http://blog.csdn.net/dqjyong/article/details/7678108 ...

【iOS系列】- 通知NSNotification的使用

转载自:http://www.cnblogs.com/fengtengfei/p/4424062.html 1:属性 通知属性: - (NSString *)name; // 通...

IOS开发(76)之 NSNotification的使用

如果在一个类中想要执行另一个类中的方法可以使用通知 1.创建一个通知对象:使用notificationWithName:object: 或者 notificationWithName:object:...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS---NSNotification使用解析
举报原因:
原因补充:

(最多只允许输入30个字)