iOS踩坑之多代理模式使用注意
时间:2022-07-24
本文章向大家介绍iOS踩坑之多代理模式使用注意,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
结论
在需要使用多代理效果时,必须卡在把最后一个代理对象加入multiDelegate的delegates数组后,再对delegate赋值。否则,会导致后添加的代理对象特有的代理方法不回调的问题。 多代理库推荐:
原理
打断点得知:在用多代理对象对delegate赋值时,会触发库中AIMultiDelegate.m文件中- (BOOL)respondsToSelector:(SEL)selector
方法,如果此时,multiDelegate对象的delegates数组中的所有代理对象还不全(还未包含你想添加的代理对象),那么未被添加的代理对象特有的实现的代理方法会被respondsToSelector方法判定为NO,导致无法被调用。即使后面重新通过addMultiDelegate或对delegate赋值,都不会生效。
因此,必须在你确保没有代理对象需要加入multiDelegate的delegates数组时,才能对delegate进行赋值。
示例
A库有代理方法1,2; B库需要实现A库的代理方法1; C功能需要实现A库的代理方法1和方法2; 为使BC都响应A的代理方法,需要使用多代理。 错误示例,下面方法会导致C类中实现的A的特有代理方法(特有:意指B中未实现)无法回调:
[A对象 addMultiDelegate:B对象];
A对象.delegate = A对象.multiDelegate;
[A对象 addMultiDelegate:C对象];
正确示例:
[A对象 addMultiDelegate:B对象];
...
[A对象 addMultiDelegate:C对象];
A对象.delegate = A对象.multiDelegate;
- 分析漏洞利用工具包 Archie和Astrum工具包
- 手游热更新方案xLua开源:Unity3D下Lua编程解决方案
- 如何为Keras中的深度学习模型建立Checkpoint
- Dubbo 源码解析 —— Zookeeper 创建节点
- 熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker
- 源码级别解读 mybatis 插件
- 在WebKit中并行加载外部脚本译:
- 100行代码,搞定http监控框架
- 【腾讯反病毒实验室】深度剖析APT28最新作品
- [译]clearfix改良及overflow:hidden详解
- 深入解析CSS样式层叠权重值
- [译]CSS边框实现“无图化”设计
- 自适应的多列图文混排改进
- [译]Laravel 5.0 之运行环境及环境变量
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释