iOS的四种传值方式
传值有四种方法 :
1. 属性传值
2. 单例传值
3. 代理传值
4. block传值
一.属性传值 (前-->后)
1. 后面的界面定义一个属性 存放前一个界面传过来的值
注意:属性定义成字符串还是别的类型 取决于你的需求
2. 后面的界面创建完毕后,为属性赋值(记录需要传递的值)
3. 在需要使用值的地方 使用属性记录的值
4. 通过 定义属性 达到传值目的的方法 称为属性传值
属性传值一般用于 从前一个界面向后一个界面传值
二.单例传值 (万能的传值方式 可以跨多个页面之间进行传值)
1.首先定义一个单例 在这个单例中只有一个实例 但是可以有多个属性
2.
1 2 3 4 5 6 7 8 9 10 | static Single *single= nil ; +(Single *)shareSingle { @synchronized ( self ){ if (single== nil ) { single=[[Single alloc] init]; } return single; } |
3.把要传的值赋值给单例中d的属性
注:单例 通常提供一个类方法 获取这个唯一的实例
//但绘制类型 就是这个类的类型 命名以default shared current standard等开头
单例一个类只有一个实例 单例的对象通常不释放 直到程序退出
三.代理传值 (后>前)
1. 后一个界面定义一个协议 并且定义一个属性叫delegate
2. 在前一个界面进入后一个界面的瞬间(创建完后一个界面之后,让前一个界面作为后一个界面的delegate)
3. 前一个界面实现代理方法
4. 后一个界面在合适的机会 让代理 执行代理方法(传的值以参数的形式含在代理方法里)
四.block传值 (后->前)
1.后一个界面声明block属性
1 | @property ( nonatomic , copy ) void (^chuanzhi)( NSString *_str); |
2.在.m中的传值方法里检查block是不是存在
1 2 3 4 | if (_chuanzhi) { _chuanzhi(_textField.text); _chuanzhi= nil ; } |
3.前一个界面进入后一个界面的方法里实现这个block
1 2 3 4 5 6 7 8 | [(dVC)后一个界面控制器 setChuanzhi:^( NSString *_str){ dispatch_async(dispatch_get_main_queue(), ^{ _label.text=_str; }); }]; |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· 程序员转型AI:行业分析
· 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能
· 为DeepSeek添加本地知识库
· .NET程序员AI开发基座:Microsoft.Extensions.AI