专栏首页iOSeriOS踩坑之多代理模式使用注意

iOS踩坑之多代理模式使用注意

结论

在需要使用多代理效果时,必须卡在把最后一个代理对象加入multiDelegate的delegates数组后,再对delegate赋值。否则,会导致后添加的代理对象特有的代理方法不回调的问题。 多代理库推荐:

https://github.com/JyyJDast1/MultiDelegateOC

原理

打断点得知:在用多代理对象对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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • springcloud gateway之addRequestParameter详细使用及踩坑注意

    SpringCloud的网关gateway提供了多个内置Filter,其中addRequestHeader是添加header的,这个无坑,比较简单。还有一个添加...

    天涯泪小武
  • weex 踩坑笔记 【原创】

    weex 踩坑笔记 Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.com/cs...

    CS逍遥剑仙
  • MySQL表设计踩过的坑!

    前言 有朋友在后台留言。希望我能说说我在数据库表设计时踩过的坑。那么,我们今天就来聊聊我在数据库表设计时踩过的坑,以及现在对数据库表设计的一点建议。希望能够帮助...

    企鹅号小编
  • 如何解决小程序的兼容性问题?

    知晓君
  • 小程序音频API踩坑手册

    极乐君
  • Android 工程师开发 iOS 是怎样的体验?

    Hello 各位朋友好久不见?,好久没有更新公众号了,为什么没有更新,是因为我最近一段时间都在写 iOS 应用,终于在前几天完成了自己的第一个 iOS 产品的开...

    Android丨Kotlin
  • 零基础学习weex(一)Vue1.0

    作为一个纯iOS开发者,每次想学习web都是看两小时就放弃。这次希望自己能够坚持下去。关于weex与 react native,暂且不管有多少坑,先尝试踩一踩,...

    sweet说好的幸福
  • WWDC19苹果发布会,谁说程序员不能做设计?SwiftUI、AR 3 、ML 3

    在刚刚结束的WWDC发布会中,苹果不仅带来了大家期待已久的 iOS 13,还有3个内容的更新我比较关注,分享给大家。

    mixlab
  • 使用个人公众号或IOS快捷指令发「动态」到hexo博客

    来自Hexo建站群群主大佬的巨作,可以满足随时随地免登录通过微信公众号来发表动态。

    Ant丶

扫码关注云+社区

领取腾讯云代金券