将最近总结的最常用的几种设计模式优势与区别自己小结一下,分享给大家。

kvo只能用来对属性作出反应,而不会用来对方法或者动作作出反应,是实现一个对象与另外一个对象保持同步的一种方法,能够提供观察的属性的最新值以及先前值,同时它是一种响应式编程思想,也就是开发中不需要考虑调用顺序,只需要知道考虑结果,类似于蝴蝶效应,产生一个事件,会影响很多东西,最后影响结果,比如开发中用KVO来监听一个dog类的name属性有没有改变,不需要知道是在哪里做了修改,只要是修改了就收监听到结果。而kvo的底层其实是重写了name属性的set方法,而能够用外界修改name的时候调用set方法就是修改了当前对象的一个isa指针来实现的。它有点类似于swift中的存储型属性中的didSet方法的监听。
 
KVC其实就是键值编码,对象在调用setValue的时候,首先会去找属性的set方法—>成员属性——>直接找对象的这个属性—>报错,比如在字典转模型的时候这个方法就经常会用到,而这里有个坑就是当模型中的属性和字典的key不一一对应,系统就会调用setValue:forUndefinedKey:报错。所以一般我们会重写这个方法防止报错。
 
block 是一种数据类型,我在开发中主要使用在3个场景:1,它作为一个代码块保存在对象中,需要的去调用就可以,在传值的时候用的特别多。2.作为方法的参数,它的实现由外部来决定,这样方法用起来就比较灵活了。3.作为方法的返回值,它的目的就是代替方法,在这个block作为返回值里可以进行很多的操作,外部调用这个方法的时候只需要知道传入的参数是什么就可以,不用知道内部是怎么实现的。实际开发中需要注意的是它的循环引用的问题,block 是 C 的,一般在ARC使用strong,MRC使用copy。
 
代理其实一般是控制器定义的一个协议,当控制器或某个对象遵循了这个协议,并实现了代理方法,就可以通过代理方法来完成不同对象的一些操作或数据传递了。代理有严格的语法,能够实现的方法必须有明确的声明。还有就是代理是一对一的,在一个应用中的控制流程是可以追踪的,而由于通知是可以实现多对多,是很难追踪到的,这点在做调试的时候代理检测起来就比通知好多了,在项目中,代理在控制器值的逆传这块是用得比较多,而且也是比较好用的,做一些简单的回调。比如我在底层界面的功能完成了,需要把一些值传到上一层去,这时候用代理就是比较直接高效了。
 
Notification: 是一种观察者模式,通知的实现比代理要简单得多,而且它是多对多的。通知一般在开发中除了需要监听一些系统的响应,如键盘弹出等,就是用在比如开发模块之间联系不怎么紧密而又需要传值,还有就是多线程之间传值的情况,这时候用通知就比代理来得直接简单了。但使用通知的时候一定要记得在释放对象的时候将通知注销掉,避免出现野指针的现象。
 
 
有哪里写得不对或者写漏的,还请大神们指出,后续改进。。。

简单总结一下NotificationCenter、KVC、KVO、Delegate的更多相关文章

  1. 04 KVC|KVO|Delegate|NSNotification区别

    一. iOS 中KVC.KVO.NSNotification.delegate 在实际的编程中运用的非常多,掌握好他们的运行原理和使用场合对于我们程序的开发将会带来事办工倍的效果:   二. KVC ...

  2. IOS开发之KVC KVO KVB

    KVC(Key Value Coding) KVO(Key Value Observing) KVB(Key Value Binding) KVO是Cocoa的一个重要机制,他提供了观察某一属性变化的 ...

  3. KVC/KVO原理详解及编程指南

    一.简介 1.KVC简介 2.KVO简介 二.KVC相关技术 1.Key和Key Path 2.点语法和KVC 3.一对多关系(To-Many)中的集合访问器方法 4.键值验证(Key-Value V ...

  4. 【转】 KVC/KVO原理详解及编程指南

    原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 前言: 1.本文基本不讲KVC/KVO的用法,只结合网上的资料说说对这种技术的 ...

  5. 转:KVC/KVO原理详解及编程指南

      作者:wangzz 原文地址:http://blog.csdn.net/wzzvictory/article/details/9674431 转载请注明出处 如果觉得文章对你有所帮助,请通过留言或 ...

  6. 阶段性总结⓵触摸事件&手势识别⓶Quartz2D绘图⓷CALayer图层⓸CAAnimation⓹UIDynamic UI动力学⓺KVC&KVO

    知识点复习   1. 触摸事件&手势识别   1> 4个触摸事件,针对视图的 2> 6个手势识别(除了用代码添加,也可以用Storyboard添加)   附加在某一个特定视图上的, ...

  7. kvc/kvo复习

    kvc/kvo复习 1 小问题 '[<XMGPerson 0x7fb8a8f30220> setValue:forUndefinedKey:]: this XMGPerson * pers ...

  8. iOS开发笔试面试- KVC/KVO简单使用

    转自:http://my.oschina.net/caijunrong/blog/510701 一.对于KVC模式(Key Value Coding): 1.其实在实际开发中用得比较多得就是:接收到j ...

  9. KVC/KVO简单实例代码

    Person.h #import<Foundation/Foundation.h> @classAccount; @interfacePerson :NSObject{ @private ...

随机推荐

  1. hadoop2——新MapReduces——yarm详解

    YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个Nod ...

  2. appium的安装过程(图文界面)

    资料来源:http://www.cnblogs.com/fnng/p/4560298.html 1.准备安装材料

  3. 3.2.3 使用Parameters动态生成where语句_JasperReports iRepor

    $P!{ParametersName}格式的SQL语句 来源:http://book.2cto.com/201306/24311.html#12732-hi-1-66926-020ef5b321fac ...

  4. PYTHON不定参数与__DOC__

    def total(initial = 5, *numbers, **keywords): count = initial for number in numbers: count += number ...

  5. Android 连接tomcat模拟登陆账号

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools=&q ...

  6. 【网络流24题】No.9 方格取数问题 (二分图点权最大独立集)

    [题意] 在一个有 m*n 个方格的棋盘中, 每个方格中有一个正整数. 现要从方格中取数, 使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. 输入文件示例inp ...

  7. [转贴]Linq之动态查询

    最近写Linq碰到一个问题, 就是如果要写一个查询系统,这个系统里面有很多TextBox可以填, 然后捞出符合各个字段的数据. 在SQL查询的时候还满方便的,用字符串连连连就可以了, ( 也就是sql ...

  8. SPRING IN ACTION 第4版笔记-第二章-004-Bean是否单例

    spring的bean默认是单例,加载容器是会被化,spring会拦截其他再次请求bean的操作,返回spring已经创建好的bean. It appears that the CompactDisc ...

  9. USB otg 学习笔记

    1 USB OTG的工作原理 OTG补充规范对USB2.0的最重要的扩展是其更具节能性的电源管理和允许设备以主机和外设两种形式工作.OTG有两种设备类型:两用OTG设备(Dualrole device ...

  10. 编写优质嵌入式C程序

    前言:这是一年前我为公司内部写的一个文档,旨在向年轻的嵌入式软件工程师们介绍如何在裸机环境下编写优质嵌入式C程序.感觉是有一定的参考价值,所以拿出来分享,抛砖引玉. 转载请注明出处:http://bl ...