zoukankan      html  css  js  c++  java
  • iOS之创建通知、发送通知和移除通知的坑

    1、创建通知,最好在viewDidLoad的方法中创建

    - (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);
    }

    2、发送通知

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

    3、移除通知,由那个控制器创建由那个控制器移除,谁创建谁移除,最好在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];
    
    }
  • 相关阅读:
    Visual Studio使用Git忽略不想上传到远程仓库的文件
    使用git处理github中提交有冲突的pull request
    C#基础访问修饰符概述
    从代码角度理解NNLM(A Neural Probabilistic Language Model)
    命名实体识别数据预处理
    基于bert命名实体识别(一)数据处理
    transformer多头注意力的不同框架实现(tensorflow+pytorch)
    基于tensorflow的bilstm_crf的命名实体识别(数据集是msra命名实体识别数据集)
    python实现命名实体识别指标(实体级别)
    基于tensorflow的文本分类总结(数据集是复旦中文语料)
  • 原文地址:https://www.cnblogs.com/rglmuselily/p/7000877.html
Copyright © 2011-2022 走看看