【iOS-界面传值方式的比较】

前言

  • 暑期学习的过程中了解了iOS的五种传值方式,上次分享的时候有的不是很理解,这篇博客参考学习之后对iOS界面传值作揖做以对比和总结
  • 五大传值方式

传值方式的比较

  • KVO传值的强调
    • KVO可以监听单个属性的变化,也可以监听集合对象的变化。通过KVO的mutableArrayValueForKey:等方法获得代理对象,当代理对象的内部对象发生改变时,会回调KVO监听的方法。集合对象包含NSArray和NSSet。
    • 如果用KVO传值想监听一个NSMutableArray对象的内部数量增减,并且可变数组的内部调整用到addObjects方法的时候,监听会失效,KVO只是监听setter方法
    • 在观察者不需要KVO的时候一定要移除监听!

比较

协议传值
  • 协议传值(代理)- 反向传值,单界面传值。
    • 好处
      • 逻辑清楚,在编译的时候编译器可以帮你辨别是不是实现了相应的代理方法,代码的可读性提高,思维清楚
      • 可以同时实现多个协议的代理传值,方便传不同的数据。在一个controller中可以定义多个协议,每个协议有不同的delegate,满足自定义开发需求,可选必选有较大的灵活性。
      • 所有能响应的事件必须在协议中有清晰的定义,一旦出现问题,那我们可以比较方便的定位错误代码。
    • 不方便的地方
      • 代码多,委托实现较繁琐,每个协议需要签订对应的代理,并且在传入和传出的界面分别实现方法,一旦漏掉就会发生错误
      • 一对一传值,一个delegate对象遵守一个协议
通知传值
  • 通知传值依靠 通知中心Notification Center传值,可以跨越多个页面传值, 一般也是从后面的页面传给前面的页面。
    • 好处
      • 一对多,发送通知以后可以在多个界面接受通知,一个对象发出通知,根据需要多个对象接受通知,实现起来简单
      • -代码量少,发送通知-注册通知-接受通知
    • 不方便
      • 发出通知之后编译器不会识别,也就是发出了通知对方能不能收到编译器不能给我们反馈
      • dealloc释放注册的对象时候,需要在通知中心取消注册,否则将出现不可预见的崩溃
KVO传值 key - Value - Observe
  • KVO传值一般适用于一个属性监听另一个属性的变化,KVO是一个对象能够观察另外一个对象的属性的值,并且能够发现值的变化。通知传值和协议传值适用一个controller与任何其他的对象进行通信,而KVO更加适合任何类型的对象侦听另外一个任意对象的改变 这里也可以是controller,但一般不是controller。这是一个对象与另外一个对象保持同步的一种方法,即当另外一种对象的状态发生改变时,观察对象 Observe马上作出反应。它只能用来对属性作出反应,而不会用来对方法或者动作作出反应。
  • 好处
    • 可以实现对某个属性变化的监听,用于观察属性的最新变化和先前变化,用KeyPath来观察属性
  • 不方便
    • 对属性重构将导致我们的观察代码不再可用,即观察者不会及时随着属性变化而变化
Block传值
  • Block是对象,它封装了一段代码,这段代码可以在任何时候执行,block的调用实际就是函数的调用代理传值也是如此二者有相似之处,也是适用于反向传值
  • 好处
    • block也就是代码块,在很多调用中使用block都会使得代码的逻辑更加清晰。语法简洁,实现回调不需要显示的调用方法,代码更为紧凑。
  • 不方便
    • 当在Block中引用某个外部变量的时候,Block内部只会进行只读拷贝,这也就意味着,即便你在使用Block之前修改了那个外部变量的值,那么在你使用的Block里面它的值依旧是最开始的那个外部变量的值。如果想要同步外部变量的值,那么就需要在block内部引用变量时,在前面加上__block关键字。(使用__block,是将变量地址传给block,不使用则传递的是变量值给block)
  • 和代理传值相似,都是属于函数调用类型,但是BLock传值代码相对简洁,对于代理传值的委托来说BLOCk只需要在父界面创建子界面的时候获取子界面的值,相对简洁
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值