iOS 创建通知、发送通知和移除通知的坑

- (void)viewDidLoad {
     [super viewDidLoad];
     //创建通知
     [[NSNotificationCenter defaultCenter] addObserver:self   selector:@selector(tongzhi:) name:@"tongzhi" object:nil];
}

//接收通知并相应的方法
- (void) tongzhi:(NSNotification *)notification{

    NSDictionary *dic = notification.object;
//    NSLog(@"通知过来的 - dic = %@",notification.object);
}

发送通知

 NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:@"324234",@"bankId",@"某某银行",@"bankName", nil];
 //通过通知中心发送通知
 [[NSNotificationCenter defaultCenter] postNotificationName:@"tongzhi" object:dic];

注意移除通知,由那个控制器创建由那个控制器移除,谁创建谁移除,最好在dealloc方法中移除,如果通知不能及时的移除掉,当下次进入该控制器时会重复创建NSNotificationCenter,在对应方法中发送通知给上一次创建的通知,但是上一个通知所在的控制器已被干掉,所以这时候就会报错

-(void)dealloc{
     //第一种方法.这里可以移除该控制器下的所有通知
     // 移除当前所有通知
    NSLog(@"移除了所有的通知");
    [[NSNotificationCenter defaultCenter] removeObserver:self];

     //第二种方法.这里可以移除该控制器下名称为tongzhi的通知
    //移除名称为tongzhi的那个通知
    NSLog(@"移除了名称为tongzhi的通知");
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil];
}

注意如果dealloc方法不调用,说明当前有变量没有被释放,这时如果找不到问题所在,也可以重写控制器的返回按钮backBarButtonItem事件,在返回的时候进行移除通知操作

//返回上一层界面事件
-(void)backPreviousViewControllerAction{

     //第一种方法.这里可以移除该控制器下的所有通知
     // 移除当前所有通知
    NSLog(@"移除了所有的通知");
    [[NSNotificationCenter defaultCenter] removeObserver:self];

     //第二种方法.这里可以移除该控制器下名称为tongzhi的通知
    //移除名称为tongzhi的那个通知
    NSLog(@"移除了名称为tongzhi的通知");
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"tongzhi" object:nil];

    // 返回上一层界面
    [self.navigationController popViewControllerAnimated:YES];

}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、创建通知,最好在viewDidLoad的方法中创建 2、发送通知 3、移除通知,由那个控制器创建由那个控制器移...
    ShanJiJi阅读 24,365评论 4 12
  • 通知介绍 Notification:观察者模式, 通常发送者和接收者的关系是间接的多对多关系。消息的发送者告知接收...
    dicesc阅读 6,046评论 0 0
  • 在了解控制器的生命周期之后,我们都知道viewWillAppear:方法是在控制器的view将要显示的时候调用的,...
    Mars飘殇阅读 12,735评论 9 8
  • https://www.jianshu.com/p/8f925e832bcb 移除通知,由那个控制器创建由那个控制...
    贝灬小晖阅读 493评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 12,185评论 16 22