KVO,面试中遇到的四个问题

基本上中级别以上的面试都会问到KVO的实现原理。
稍微做准备就知道利用运行时,自动生成子类,重写setter方法……

这是原理可以通过一篇博客来轻松搞定,那么应用呢?有下面这四个问题

  1. 对成员变量直接赋值会响应监听嘛?
  2. 如果不实现-observeValueForKeyPath:ofObject:change:context:方法会怎么样?
  3. 不移除监听会怎么样?
  4. 分类的属性能否实现KVO?

思考……

  1. 对成员变量直接赋值会响应监听嘛?
    如果理解原理,这应该能准确回答,不会响应监听。

  2. 如果不实现-observeValueForKeyPath:ofObject:change:context:方法会怎么样?
    答案是:crash
    日志是:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '<ViewController: 0x7fd1ffc05180>: An -observeValueForKeyPath:ofObject:change:context: message was received but not handled.

方法未实现嘛!也很好理解。
但是仔细想想,一定嘛?如果未检测到值的改变自然不会crash,因为没有去调用方法。

  1. 不移除监听会怎么样?
    答案是:crash
    日志是:
2017-03-16 16:07:30.528 KVODemo[9836:512230] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'An instance 0x60000001b330 of class Person was deallocated while key value observers were still registered with it. Current observation info: <NSKeyValueObservationInfo 0x600000036e80> (
<NSKeyValueObservance 0x60000004e250: Observer: 0x7fd1cc0011f0, Key path: name, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000004f660>
<NSKeyValueObservance 0x60000004f9f0: Observer: 0x7fd1cc0011f0, Key path: age, Options: <New: YES, Old: NO, Prior: NO> Context: 0x0, Property: 0x60000004fab0>
)'
  1. 分类的属性能否实现KVO?
    答案是:可以
    理解原理自然就知道了

虽然很简单,还是写了个demo验证上面的结论

https://github.com/lych0317/KVODemo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 写在前面 程序设计语言中有各种各样的设计模式(pattern)和与此对应的反设计模式(anti-pattern),...
    Frankxp阅读 5,048评论 0 23
  • KVO 的基本概念(Key Value Observing) 基本概念键值观察是一种使对象获取其他对象的特定属性变...
    生如夏花逝如秋叶阅读 1,351评论 0 1
  • KVO 作为 iOS 中一种强大并且有效的机制,为 iOS 开发者们提供了很多的便利;我们可以使用 KVO 来检测...
    JzRo阅读 1,120评论 0 2
  • 【原】iOS下KVO使用过程中的陷阱KVO,全称为Key-Value Observing,是iOS中的一种设计模式...
    nadou23阅读 2,124评论 0 0
  • 离镜和天空的交相辉映, 色彩竟然是和谐,不是破碎的痛苦,而是一种像冰面般的空灵纯净。 非原创,找不到作者,分享于此。
    木咸阅读 333评论 2 1

友情链接更多精彩内容