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

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. Activity组件的UI实现

    Activity组件的UI实现需要与WindowManagerService服务和SurfaceFlinger服务进行交互 1. Activity组件在启动完成后,会通过一个类型为Session的Bi ...

  2. 警惕arm-linux-gcc编译器优化选项

    arm-linux-gcc的优化选项例如(-O2),可以加速我们的程序,使程序执行效率更高.但是,倘若我们就是需要程序慢一点运行,但是优化却把我们的延时函数优化的没有了的时候,这种优化却不是我们想要的 ...

  3. linq 动态排序

    /// <summary> /// 排序 /// </summary> /// <typeparam name="T"></typepar ...

  4. Nth Digit | leetcode

    Find the nth digit of the infinite integer sequence 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, ... Note: n i ...

  5. 关于Java(JDBC介绍)

    JDBC API 允许用户访问任何形式的表格数据,尤其是存储在关系数据库中的. JDBC 简单功能 连接数据源,如数据库 传给数据库查询和更新指令 获取并处理数据库返回结果(对查询等的响应) 示例代码 ...

  6. bzoj 3165: [Heoi2013]Segment 动态凸壳

    3165: [Heoi2013]Segment Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 202  Solved: 89[Submit][Stat ...

  7. 中国首个 SaaS 模式的云告警平台 iOS 版 APP 上线

    今天上午,国内首个 SaaS 模式的云告警平台 OneAlert 正式发布 ios 版 APP,每个 ios 用户,无需电脑,都可以通过手机全程跟踪所有告警,并且可以和每一个成员一键式电话沟通,团队协 ...

  8. Hibernate 多对一关系中,在多的一方进行数据的插入

    先看两个映射关系: 部门: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//H ...

  9. TortoiseSVN下载,安装,配置,常用操作 svn教程

    一. 首先在百度搜索并下载 TortoiseSVN 推荐从官网下载,软件分为32位和64位版本,下载时请根据自己的系统位数进行下载:

  10. [转贴]从零开始学C++之异常(一):C语言错误处理方法、C++异常处理方法(throw, try, catch)简介

    一.C语言错误处理方法 1.返回值(if … else语句判断错误) 2.errno(linux 系统调用) 3.goto语句(函数内局部跳转) 4.setjmp.longjmp(Do not use ...