iOS基础·OC高级篇杂谈基础

block,delegate, notification, KV

2016-06-05  本文已影响1015人  怪小喵

delegate

delegate 是代理模式的一种实现,就是委托他人帮自己做事。<事件一般通过protocol约定>
一般的使用场景是 控制器的反向传值传递一个事件, A类(委托方)触发某些方法,需要由B 类(代理方)做出响应或处理。这种设计 耦合更低,扩展性更好(如tableView 的代理可以是任意实现代理方法的对象 ,已应对更对变更)

block

block就是一个代码块,但是它的神奇之处在于在内联(inline)执行的时候(这和C++很像)还可以传递参数。同时block本身也可以被作为参数在方法和函数间传递,这就给予了block无限的可能。在一段请求连续代码中可以看到调用参数(如发送请求)和响应结果。采用block技术能够抽象出很多共用函数,使代码高聚合,可读性,可维护性高(如网络库AFNetwork,GCD 中 ,链式编程中)。

对于反向传值 block写法更简练,不需要写protocol
使用block需要注意防止循环引用, 解决方案是用weakself。
block 类型属性使用copy 修饰。
block在堆中 ,想改变block里面变量的值, 需要加参数__block

Notification

一个消息通知机制,类似广播。观察者只需向消息中心注册感兴趣的东西,当有地方发出这个消息的时候,通知中心会发送给注册这个消息的对象。通知是一种在程序中可以获得高效协作同时保持较高内聚性的机制。他减少了程序中对象相互之间的强依耐性(这种依赖性会大大降低程序中代码的可复用性)。苹果给我们封装了这个NSNotificationCenter,让我们可以很方便的进行通知的注册和移除。
使用要注意addObserver后,必须要有remove操作(不移除可能会有野指针问题)。

KVO

观察者模式的一种实现, 一个对象能够观察另外一个对象的属性的值,并且能够发现值的变化。这是一个对象与另外一 个对象保持同步的一种方法,用key paths来观察属性,能够提供观察的属性的最新值以及先前值;
使用步骤为
1.注册,指定被观察者的属性, 2. 实现回调方法 , 3. 移除观察(不移除会崩溃),

使用场景

1. delegate or block

delegate 面向过程的 可以在所有事件中维持 state 而多个独立的block不能

2.notifation or KVO

部分摘至 stablekernel.com

上一篇 下一篇

猜你喜欢

热点阅读