iOS 关于NSNotificationCenter

通常我们在 iOS 中发生什么事件时该做什么是由 Delegate 实现的,  Apple 还为我们提供了另一种通知响应方式,那就是 NSNotification.

NSNotificationCenter 较之于 Delegate 可以实现更大的跨度的通信机制,可以为两个无引用关系的两个对象进行通信。NSNotificationCenter 的通信原理使用了观察者模式(KVO):三步骤  1在需要实施的地方注册  2并 写好触发的事件  3在需要触发该事件的地方激发

1. NSNotificationCenter 注册观察者对某个事件(以字符串命名)感兴趣,及该事件触发时该执行的 Selector 或 Block
2. NSNotificationCenter 在某个时机激发事件(以字符串命名)
3. 观察者在收到感兴趣的事件时,执行相应的 Selector 或 Block4. 注销观察者  这个对应注册  一般在selector方法里 ,也相对于注册的时机 一般是 viewWillappear 注册 viewWillDisapper 注销
//
//  SecondViewController.m
//  StoryBoard
//
//  Created by HF on 15/1/12.
//  Copyright (c) 2015年 YLYL. All rights reserved.
//

#import "SecondViewController.h"
#import "BasicFunctuin.h"
@interface SecondViewController ()

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    //注册通知 通知实施方法是update  激活关键字是 @"update"
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(update) name:@"update" object:nil];
}//触发方法
-(void) update
{
    DLog(@"KVO");

//观察者注销,移除消息观察者

[[NSNotificationCenter defaultCenter]removeObserver:self name:@"update" object:nil];

}
@end
//
//  FirstViewController.m
//  StoryBoard
//
//  Created by wzyb on 14-12-11.
//  Copyright (c) 2014年 YLYL. All rights reserved.
//
#import "FirstViewController.h"
@interface FirstViewController ()

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}

-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:YES];     //实施通知  在此时触发关键字@"update" 的通知方法  只要是该关键字 方法都执行
    [[NSNotificationCenter defaultCenter] postNotificationName:@"update" object:nil];
}

@end
虽然在 IOS 用上 ARC 后,不显示移除 NSNotification Observer 也不会出错,但是这是一个很不好的习惯,不利于性能和内存。

移除通知:removeObserver:和removeObserver:name:object:其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:   是删除匹配了通知中心保存的调度表中观察者的一个入口。

这个比较简单,直接调用该方法就行。例如:


[[NSNotificationCenter defaultCenter] removeObserver:observer name:nil object:self];


注意参数notificationObserver为要删除的观察者,一定不能置为nil。

注销观察者有2个方法:

a. 最优的方法,在 UIViewController.m 中:

-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}现在arc中一般post
b. 单个移除:

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"Notification_GetUserProfileSuccess" object:nil];
时间: 2024-10-25 13:08:20

iOS 关于NSNotificationCenter的相关文章

iOS之NSNotificationCenter通知中心使用事项

其实这里的通知和之前说到的KVO功能很想,也是用于监听操作的,但是和KVO不同的是,KVO只用来监听属性值的变化,这个发送监听的操作是系统控制的,我们控制不了,我们只能控制监听操作,类似于Android中系统发送的广播,我们只能接受.但是通知就不一样了,他的监听发送也是又我们自己控制,我们可以在任何地方任何时机发送一个通知,类似于Android中开发者自己发送的广播.从这一点看来,通知的使用场景更为广泛了. 下面就来看一下例子: 还是护士和小孩的那个例子 Children.h [objc] vi

iOS 设计模式-NSNotificationCenter 通知中心

通知介绍 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么. 其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 初始化通知中心 // 初始化通知中心 NSNotificationCenter *center =[NSNotificationCenter defaultCenter];

iOS集成Dcloud

1 .参考链接 http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/83http://ask.dcloud.net.cn/docs/#http://ask.dcloud.net.cn/article/84 2 .注意官方介绍的这句. 注意开发者在使用示例工程时建议不要把工程从SDK目录里挪出来,如果要移动工程可以通过修改library search path ,framework search path 和head se

Android探索之BroadcastReceiver具体使用以及安全性探究

前言: 最近的计划是学习一下iOS的NSNotificationCenter,突然想起来的Android的广播机制,所以还是觉得先对BroadcastReceiver来个全面的总结然后再去学习NSNotificationCenter. BroadcastReceiver简介: BroadcastReceiver是Android四大组件之一,广播是一种广泛运用的在应用程序之间传输信息的机制,而BroadcastReceiver 是对发送出来的广播进行过滤接收并响应的一类组件:广播接收者( Broa

iOS NSNotificationCenter(消息机制)

转自:http://blog.csdn.net/liliangchw/article/details/8276803 对象之间进行通信最基本的方式就是消息传递,在Cocoa中提供Notification Center机制来完成这一任务.其主要作用就是负责在任意两个对象之间进行通信.使用方法很简单,如下几个步骤即可: 假设A与B之间进行通信,B来触发事件,A接受该事件,并作出响应.1) A编写自定义的消息响应函数update2) A向消息中心注册,[NSNotificationCenter def

IOS Android:消息事件通知 NSNotificationCenter EventBus

文章来自:http://blog.csdn.net/intbird IOS IOS系统自带 NSNotificationCenter 0,上图 1,初始化程序入口 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { MainViewController* mainView = [[MainViewController alloc

iOS NSNotificationCenter 最基本使用

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt:2] , @"actcode",nil]; //首先设置需要通知的方法.加入通知中心.比如当程序跑到这时就通知游戏 [[NSNotificationCenter defaultCenter] postNotificationName:gameStartNotification object:nil userInf

iOS开发-消息通知机制(NSNotification和NSNotificationCenter)

iOS中委托模式和消息机制基本上开发中用到的比较多,一般最开始页面传值通过委托实现的比较多,类之间的传值用到的比较多,不过委托相对来说只能是一对一,比如说页面A跳转到页面B,页面的B的值改变要映射到页面A,页面C的值改变也需要映射到页面A,那么就需要需要两个委托解决问题.NSNotificaiton则是一对多注册一个通知,之后回调很容易解决以上的问题. 基础概念 iOS消息通知机制算是同步的,观察者只要向消息中心注册, 即可接受其他对象发送来的消息,消息发送者和消息接受者两者可以互相一无所知,完

IOS NSNotificationCenter 通知的使用

1.注册通知 [NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notify) name:@"myNotify" object:nil]; -(void)notify { NSLog(@"notify"); } 2.触发通知 [NSNotificationCenter defaultCenter] postNotificationName:@"myNotify&