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

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

热门文章

最新文章

  • 1
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 2
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
  • 3
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 4
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
  • 6
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
  • 7
    iOS各个证书生成细节
  • 8
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
  • 9
    iOS MapView(定位)
  • 10
    iOS 自定义字体
  • 1
    iOS|解决 setBrightness 调节屏幕亮度不生效的问题
    115
  • 2
    iOS|记一名 iOS 开发新手的前两次 App 审核经历
    20
  • 3
    iOS各个证书生成细节
    30
  • 4
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
    155
  • 5
    Cellebrite UFED 4PC 7.71 (Windows) - Android 和 iOS 移动设备取证软件
    52
  • 6
    【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    67
  • 7
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    54
  • 8
    【01】仿站技术之python技术,看完学会再也不用去购买收费工具了-用python扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-客户的麻将软件需要下载落地页并且要做搜索引擎推广-本文用python语言快速开发爬取落地页下载-优雅草卓伊凡
    64
  • 9
    uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
    163
  • 10
    【05】2025年1月首发完整版-篇幅较长-苹果app如何上架到app store完整流程·不借助第三方上架工具的情况下无需花钱但需仔细学习-优雅草央千澈详解关于APP签名以及分发-们最关心的一篇来了-IOS上架app
    358