美文网首页
iOS代理 通知 block传值的规范写法

iOS代理 通知 block传值的规范写法

作者: 凡尘一笑 | 来源:发表于2016-10-28 14:01 被阅读175次

    最近也不知道写什么好,因为空闲下来就想写点东西,以前写代码没有注意到代理和block的规范,最好是带上当前类,为了提高自己代码的规范,就写了这篇简单的文章

    代理

    第一步

    在被代理者声明一个协议,写出一个方法
    代理的规范写法:类名+Delegate
    方法的规范写法:类名+(第一个参数是类本身)+(其他参数)

    @class FirstView;
    
    @protocol FirstViewDelegate <NSObject>
    
    @optional
    - (void)FirstViewbtnClick:(FirstView *)firstView andStr:(NSString *)str;
    
    @end
    
    第二步:

    再拥有一个代理属性
    代理使用weak防止循环引用
    使用id 并遵守代理

    @property (nonatomic,weak) id <FirstViewDelegate> delegate;
    
    
    第三步:

    在某个事件操作时候,进行查看代理是否遵循代理,如果遵循代理,则让代理相应协议中的方法

        if (_delegate &&[_delegate respondsToSelector:@selector(FirstViewbtnClick: andStr:)]) {
            [_delegate FirstViewbtnClick:self andStr:str];
        }
    

    第四步:让代理者遵循协议,并且实现协议方法

    @interface ViewController ()<FirstViewDelegate>
    
    
    //代理
    - (void)FirstViewbtnClick:(FirstView *)firstView andStr:(NSString *)str
    {
        NSLog(@"%@",str);
    }
    

    通知

    第一步:这里在某个事件被操作时候发出通知,类似于代理中查看代理者是否遵循代理

     [[NSNotificationCenter defaultCenter] postNotificationName:@"selectRow" object:nil userInfo:@{@"selectRowKey":_str}];
    

    第二步:接受通知,这里注意那个方法是需要传递参数的

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

    第三步:实现接受通知的那个方法,注意这里的key要和发出通知的一致。建议最好是写一个单独的类存放这些东西。我这里为了大家都看得懂就不写了。

    - (void)noti:(NSNotification *)noti
    {
        NSLog(@"%@",noti.object);
    }
    

    第四步:记得移除通知

    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    
    

    Block

    类比代理
    第一步:声明一个block

    typedef void(^Block) (FirstView *firstVC, NSString *str);
    
    

    第二步:拥有一个block属性

    @property (nonatomic,copy) Block block;
    

    第三步:在某个事件操作时候

     if (_block) {
            _block(self, str);
        }
    

    第四步

      self.first.block = ^(FirstView *firstVC, NSString *str) {
            NSLog(@"%@",str);
        };
    

    Demo里面把三种方法都写齐全了
    代码留给你,喜欢和点赞留给我
    https://gitee.com/lanyingwei/codes/jem9ib4vxy2wuopgkalfz91

    相关文章

      网友评论

          本文标题:iOS代理 通知 block传值的规范写法

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