iOS:delegate代理的使用

本文介绍了iOS中delegate代理的使用,包括代理的三大组成:协议、代理和委托,以及实现步骤,如制定协议、创建代理对象、实现协议等。通过一个改变所有button颜色的需求,展示了代理在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目开发过程中有一个需求是将下载的图片通过调用微信接口分享出去,但是在实现过程中调用这个微信接口方法的控件类是一个继承自UIView的类,报错提示为请使用继承自UIViewController的子类去调用这个接口。此时就必须使用代理将这个接口方法的调用托管到父控件中代为执行【父控件继承UIViewController
本篇文章就简单的介绍一下代理的使用方法,以目前的水平就不深究原理了。

一:代理的三大组成

1:协议
用来定义双方要去做什么,协议的内容一般都是方法列表。
相当于是合同
2:代理
代理方,实现具体的操作逻辑,委托方不知道具体的实现细节,只调用即可。
相当于苹果公司
3:委托
委托方,根据协议中的内容委托代理方去完成功能
相当于富士康
注意:一个代理可以有多个委托,一个委托可以有多个代理
说的通俗一点,不就是甲方乙方以及合同吗???

二:实现步骤

需求:
DateView中的时间改变后,在SaleHistoryViewController中实现改变所有的button颜色的逻辑操作。即改变button颜色的方法调用在DateView页面,实际的改变操作是在SaleHistoryViewController中,以上就是需求,需要使用代理来实现相应的操作。

1: 委托方创建合同:制定协议
所谓的协议就是合同,一般都是由需求方去制定,因此协议是写在委托方上的。
DateView文件上

@protocol DateViewDelegate <NSObject>

- (void)changeAllButton; // 协议内容,方法列表

@end

2:委托方委派钦差大臣:创建代理对象
DateView文件中需要有一个对象去调用这个代理方法,而这个代理对象的类型就是刚刚制定的协议。

@interface DateView : UIView
	@property (nonatomic, weak)id <DateViewDelegate>delegate;
@end

3:代工工厂敲定合同: 实现协议
SaleHistoryViewController相当于富士康代工工厂,在工作之前,需要也签一下合同


@interface SaleHistoryViewController ()<DateViewDelegate>{
    // 定义的其他变量
    。
    。
    。
}
@end

4: 确定具体代工哪条生产线:绑定代理对象
富士康公司不仅为苹果代工他还为其他公司代工,生产线非常的多,因此你需要在特定的生产线上将他的代理对象绑定一下,两者相互绑定刻上一个章。

// dateView为实例化的DateView对象
dateView.delegate = self;

5:代工工厂建生产线:创建实现方法
代工工厂SaleHistoryViewController,实际的生产线都在这。在这里写具体的实现逻辑供委托方去调用

// 执行改变所有的button的颜色
-(void)changeAllButton{
    for (UIButton *button in btnArr) {
            [button setBackgroundColor:[UIColor whiteColor]];
            [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
    }
}

6:听老板命令行事: 触发代理方法
老板说代工工厂何时开工,代工工厂就得何时开工

 if (self.delegate && [self.delegate respondsToSelector:@selector(changeAllButton)]) {
        [self.delegate performSelector:@selector(changeAllButton)];
    }

说明:在这里使用if语句是为了筛选出指定工厂的,
首先要再次确定当前公司已经指定了钦差大臣(self.delegate)其次要确定代理工厂中存在这条指定的代工生产线( [self.delegate respondsToSelector:@selector(changeAllButton)])。符合条件后进入调用环节,钦差大臣调用生产线( [self.delegate performSelector:@selector(changeAllButton)])。

三:最后的话

对iOS了解的只不过才是刚刚开始,斗胆将代理使用调侃的方式进行总结了一下,如果有错误,还请能够直接指出来。非常感谢!

内容概要:本文档详细介绍了基于MATLAB实现的无人机三维路径规划项目,核心算法采用蒙特卡罗树搜索(MCTS)。项目旨在解决无人机在复杂三维环境中自主路径规划的问题,通过MCTS的随机模拟与渐进式搜索机制,实现高效、智能化的路径规划。项目不仅考虑静态环境建模,还集成了障碍物检测与避障机制,确保无人机飞行的安全性和效率。文档涵盖了从环境准备、数据处理、算法设计与实现、模型训练与预测、性能评估到GUI界面设计的完整流程,并提供了详细的代码示例。此外,项目采用模块化设计,支持多无人机协同路径规划、动态环境实时路径重规划等未来改进方向。 适合人群:具备一定编程基础,特别是熟悉MATLAB和无人机技术的研发人员;从事无人机路径规划、智能导航系统开发的工程师;对MCTS算法感兴趣的算法研究人员。 使用场景及目标:①理解MCTS算法在三维路径规划中的应用;②掌握基于MATLAB的无人机路径规划项目开发全流程;③学习如何通过MCTS算法优化无人机在复杂环境中的飞行路径,提高飞行安全性和效率;④为后续多无人机协同规划、动态环境实时调整等高级应用打下基础。 其他说明:项目不仅提供了详细的理论解释和技术实现,还特别关注了实际应用中的挑战和解决方案。例如,通过多阶段优化与迭代增强机制提升路径质量,结合环境建模与障碍物感知保障路径安全,利用GPU加速推理提升计算效率等。此外,项目还强调了代码模块化与调试便利性,便于后续功能扩展和性能优化。项目未来改进方向包括引入深度强化学习辅助路径规划、扩展至多无人机协同路径规划、增强动态环境实时路径重规划能力等,展示了广阔的应用前景和发展潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值