美文网首页
iOS - 通知,代理,block的使用以及不同

iOS - 通知,代理,block的使用以及不同

作者: CDLOG | 来源:发表于2018-08-16 15:17 被阅读9次

    概览

    通知,代理,block都用于系统回调
    通知用于一对多的关系,即一个发送与多个接收
    代理,block都是一对一,但是block的阅读性和效率更高
    代理是用对象的地址去调用函数

    Block
    代码块,顾名思义,就是通过Block传入一组代码。这是一种轻量级的回调,能够直接访问上下文,使用块的地方和块的实现地方在同一个地方,使得代码组织更加连贯。

    Delegate
    委托或者说代理,委托是协议的一种,顾名思义,就是委托他人帮自己去做事。跟Block相比,是一个重量级的回调。方法的声明和实现分离开来,代码的连贯性不是很好,但是可以同时传递多组函数,方便在不同时候调用。

    1,发送通知(带信息)

    不带信息的通知选择不带userInfo参数的方法

    NSDictionary *dic = [NSDictionary dictionaryWithObject:@"userInfo消息" forKey:@"param"];
        
        [[NSNotificationCenter defaultCenter] postNotificationName:@"noti3" object:nil userInfo:dic];
    

    2,接受通知

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(noti3:) name:@"noti3" object:nil];
    //接受的信息方法,注意参数是NSNotification
    -(void)noti3:(NSNotification *)noti
        
        {
            
            //使用userInfo处理消息
            
            NSDictionary  *dic = [noti userInfo];
            
            NSString *info = [dic objectForKey:@"param"];
            
            NSLog(@"接收 userInfo传递的消息:%@",info);
            
        }
    

    3,观察者需要移除通知

    -(void)dealloc
        
        {
            
            //移除观察者,Observer不能为nil
            
            [[NSNotificationCenter defaultCenter] removeObserver:self];
            
        }
    

    相关文章

      网友评论

          本文标题:iOS - 通知,代理,block的使用以及不同

          本文链接:https://www.haomeiwen.com/subject/zbcobftx.html