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

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

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

相关文章
|
8月前
|
iOS开发
iOS block修饰符用copy还是strong
iOS block修饰符用copy还是strong
102 0
|
iOS开发
iOS开发 - 千万不要把通知注册写在viewWillAppera里面
iOS开发 - 千万不要把通知注册写在viewWillAppera里面
76 0
|
移动开发 JavaScript weex
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
weex-自定义module,实现weex在iOS的本地化,js之间互相跳转,交互,传值(iOS接入weex的最佳方式)
219 0
|
iOS开发 开发者
iOS开发 - 如何写出漂亮的block
iOS开发 - 如何写出漂亮的block
75 0
|
iOS开发
iOS开发- 关于Block的几种应用
iOS开发- 关于Block的几种应用
92 0
|
iOS开发 Python
iOS小技能:lldb打印block参数签名
iOS逆向时经常会遇到参数为block类型,本文介绍一个lldb script,可快速打印出Objective-C方法中block参数的类型。
159 0
iOS小技能:lldb打印block参数签名
|
自然语言处理 iOS开发
IOS——Block
IOS——Block
63 0