KVC KVO delegate block NSNotification 的应用场景 以及各种坑

原创 2016年06月01日 00:04:06


KVC KVO delegate block NSNotification 的应用场景 注意事项

KVC,KVO应用场景:

    • KVC:

      • 1.字典转模型 ,简化代码量

      • 2.修改系统的只读变量: 例如自定义tabBar的时候,由于tabBar是只读属性,只能用KVC赋值.

      • 3.可以任意修改一个对象的属性和变量(包括私有变量)

      • 4.可以通过运算符层次查找对象的属性,keyPathTeacher *t = [Teacher alloc ] init];

        t.chiild = [Child alloc ] init];

        t.child.book = [Book alloc] init];

        KVC 大招:XBLog(@"%@",ValueForKeyPath(@"child.book"));

  • KVO:监听属性的变化,记得及时移除,影响性能

代理/通知/block ? 如何选用:假如A和B需要通信,B需要获取A的消息

  • delegate:如果A和B有相互的关联,就用delegate ,代理是一对多,很多原声控件就是用的代理(UITextField,UITableView等)

  • notification: .采用单例的设计模式,如果没关系就用通知.,通知是多对多,而且发送的只管发送,接收的只管接收.当需要跨越多个控制器进行传值的时候,notification是一个最方便的选择.,使用完毕需要及时注销

  • KVO:用于监听属性的变化,观察者模式,可以是多对一

  • block:跟delegate使用场合类似,使用起来更简单一些.,但block使用都是在一对一

使用注意事项:

  • delegate:在代理中调用方法的时候是在系统的子线程,因此,当使用delegate进行UI操作的时候必须调用GCD的主线程方法,回到主线程操作. dispatch_async(dispatch_get_main_queue(), <^(void)block>),在block中写进行的UI操作代码。

  • 通知:需要及时注销观察者,这种bug较难查找,不能滥用,否则出现问题也是难于追查

  • block: 1.block中的对象会自动进行一次retain操作.容易造成内存泄漏2.block内部默认引用为强引用,容易造成循环引用

使用场景的对比:

  • 回调方法:在一些完成之后的问题处理上,一般使用delegate和block,比如网络请求完成后的回调,页面加载完成后的回调.此时,如果是一对一传输回调,就用blcok,因为使用简单.如果是一对多,则delegate更有优势

  • 跨层通信:使用通知

  • UI响应事件:用delegate,苹果的很多原生控件就是这么做的

  • 简单的值传递:还是block更加高效,代理还需要设置和遵守协议.

NSNotification是同步还是异步?

之前面试被问到NSNotification在发送通知的时候,是同步还是异步,当时自己真不清楚,然后这两天又遇到这个问题,自己写了代码测试一下。代码如下:#import "ViewController....
  • lxubin
  • lxubin
  • 2016年07月30日 17:17
  • 7181

【iOS】KVC 和 KVO 的使用场景

Key Value Coding Key Value Coding是cocoa的一个标准组成部分,它能让我们可以通过name(key)的方式访问property, 不必调用明确的property...
  • chenglibin1988
  • chenglibin1988
  • 2014年07月29日 10:25
  • 26001

NSNotification是同步还是异步?

之前面试被问到NSNotification在发送通知的时候,是同步还是异步,当时自己真不清楚,然后这两天又遇到这个问题,自己写了代码测试一下。代码如下:#import "ViewController....
  • lxubin
  • lxubin
  • 2016年07月30日 17:17
  • 7181

各类排序算法比较和应用场景

简介插入排序插入排序是一种较为简单的排序算法,它的基本思想是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 形象的可以理解为打扑克抓拍的过程,通常我们右手抓牌,...
  • MBuger
  • MBuger
  • 2017年03月28日 21:47
  • 2961

iOS 对象之间的通信方式(delegate、block、NSNotification、kvc、kvo)总结

有五种方式:delegate(代理)、block(代码块)、NSNotification(通知)、kvc(键-值编码)、kvo(​键值观察模式)...
  • u010958446
  • u010958446
  • 2017年02月15日 17:27
  • 236

KVC与KVO的应用场景

【iOS】KVC 和 KVO 的使用场景  2014-07-29 10:25 10335人阅读 评论(1) 收藏 举报  分类: Object-C(13)  ...
  • zhang_xiao8wan8
  • zhang_xiao8wan8
  • 2016年01月07日 10:01
  • 349

KVC、KVO、NSNotification、delegate 总结及区别

1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的...
  • yst19910702
  • yst19910702
  • 2016年06月01日 10:54
  • 278

iOS 中KVC、KVO、NSNotification、delegate 总结及区别

1、KVC,即是指 NSKeyValueCoding,一个非正式的Protocol,提供一种机制来间接访问对象的属性。而不是通过调用Setter、Getter方法访问。KVO 就是基于 KVC 实现的...
  • wlm527
  • wlm527
  • 2015年12月22日 16:05
  • 199

KVO,NSNotification,delegate及block区别?

KVO,NSNotification,delegate及block区别? KVO就是cocoa框架实现的观察者模式,一般同KVC搭配使用,通过KVO可以监测一个值得变化,比如View的高度变...
  • zhangshichi
  • zhangshichi
  • 2016年04月16日 11:07
  • 775

Objective-C KVC/KVO NSNotification(通知)的简单理解与应用

KVC :Key-Value Coding 键值编码 KVO :Key-Value Observing 键值观察 NSNotificationCenter 通知...
  • WC3312245110
  • WC3312245110
  • 2015年12月16日 20:06
  • 230
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:KVC KVO delegate block NSNotification 的应用场景 以及各种坑
举报原因:
原因补充:

(最多只允许输入30个字)