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

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. 从IT的角度思考BIM(二):模式与框架

    我们满怀着美好期许,鼓起勇气敲响了 BIM 世界的大门.忽然人群中有人高呼:BIM 已死,大家都散了吧! 这时人群开始骚动起来.“我早就说这玩意是忽悠人的吧,你们不信还偏要来”,“我花了好多钱准备这次 ...

  2. 导航 - 利用系统自带的App导航

    导航: 可以将需要导航位置丢给系统自带的App进行导航 发送网络请求到公司服务器, 获取导航数据, 自己手动绘制导航 利用三方SDK进行导航(百度) #import "ViewControl ...

  3. C与OC、C++的区别

    C语言的特点:1)C语言是结构化语言,层次清晰,调试和维护比较容易2)表现能力和处理能力比较强,可直接访问内存的物理地址3)c语言实现对硬件的编辑,c语言课用语系统软件的开发,也可用语应用软件的开发, ...

  4. 解决nginx 504 Gateway Time-out的一些方法

    在CentOS下配置lnmp组合基本上用的都是同样的配置文件,一直都没出现过问题,可最近在一个vps上安装同样的环境之后,网站在线10多人就出 现了打开速度非常缓慢的情况,有好几次都是直接达到了ngi ...

  5. ThinkPHP3.1快速入门(3)查询语言

    http://www.thinkphp.cn/info/115.html 介绍 ThinkPHP内置了非常灵活的查询方法,可以快速的进行数据查询操作,查询条件可以用于读取.更新和删除等操作,主要涉及到 ...

  6. 【Xamarin开发 Android 系列 3】循序渐进的学习顺序

    原文:[Xamarin开发 Android 系列 3]循序渐进的学习顺序 指定合理的学习步骤,将各个技术点进行强化.慢慢 的就从点到线 到面的飞跃,一切仅仅是时间问题,开始前,请记住,学习是最佳的投资 ...

  7. Php使用sqlite

    php sqlite文档:http://php.net/manual/en/book.sqlite.php sql:http://www.php100.com/html/webkaifa/PHP/PH ...

  8. jQuery zTree v3.5 实例3 异步树

    最终效果: 点击非叶子节点时,向后台发送请求,获取下级菜单 前台代码如下: <%@ page language="java" contentType="text/h ...

  9. Linux本地无法登录,远程却可以登录

    [root@oraserver ~]# vi /etc/pam.d/login 将以下内容注释掉: #session    required     /lib/security/pam_limits. ...

  10. [LeetCode#218] The Skyline Problem

    Problem: A city's skyline is the outer contour of the silhouette formed by all the buildings in that ...