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

最近也不知道写什么好,因为空闲下来就想写点东西,以前写代码没有注意到代理和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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容