iOS基础 - 代理:实现页面传值
▶ 代理传值
delegate 和 block 常用于逆向传值,两者都比较好用,但还是有区别的
A. delegate 在写法上比较麻烦,一方必须设置代理,另一方必须遵循代理且实现代理!其优势是代理的回调函数可以是多个函数,在不同的时机调用不同的回调函数;也可以说在一个协议中定义多个方法,在不同的触发事件中执行
B. block 在写法上比较自由,是一种轻量级的回调,它能够直接访问上下文,使用块的地方和块的实现地方在同一个地方,使得代码组织更加连贯。但是在使用 block 时需要注意防止循环引用,导致内存泄漏的问题
▶ 代码示例
实现第二页面向第一页面传值
// - SecondViewController.h:首先在将要传值的页面中制定协议并声明代理方法(方法接口)、代理
#import <UIKit/UIKit.h> // 第一步:制定协议 @protocol GivenValues <NSObject> // 并声明代理方法 -(void)giveValuesFromNextPage:(NSString*)name; @end @interface SecondViewController : UIViewController // 第二步:代理 @property(nonatomic,weak)id<GivenValues>delegate; @end
// - SecondViewController.m
#import "SecondViewController.h" @implementation SecondViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; } // 第五步:代理传值 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ [self dismissViewControllerAnimated:YES completion:^{ if ([self->_delegate respondsToSelector:@selector(giveValuesFromNextPage:)]) { [self->_delegate giveValuesFromNextPage:@"代理传值"]; } }]; } @end
// - ViewController.m:在接受传值的页面中接受协议、且成为代理后,实现代理方法
#import "ViewController.h" #import "SecondViewController.h"// 需引入头文件 @interface ViewController()<GivenValues>// 第三步:接受协议 @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor yellowColor]; } - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ SecondViewController *secVC = [SecondViewController new]; secVC.delegate = self;// 指定代理 [self presentViewController:secVC animated:YES completion:nil]; } // 第四步:实现传值页面中的代理方法 -(void)giveValuesFromNextPage:(NSString *)name{ NSLog(@"代理方法触发!name = %@",name); } @end
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!