我想快速了解KVO的用法,正如我在Apple Doc或任何其他在线文章中所读到的那样,它指出它提供了对属性的间接访问并且可以通过字符串寻址。我有一些疑问。
答案 0 :(得分:2)
如果我可以直接通过person.name =“ John”设置属性,为什么 间接使用设置值作为键名=“ John”
请阅读“What is the point of key-value coding?”
苹果医生说 符合键值编码的标准可以参与各种各样的可可 核心数据等技术。为什么在其他框架中而不是在使用它
在适当的地方使用它。在有用且性能可接受的地方使用它。如果它没有用,或者性能太低,则不使用。
在运行时或动态使用它来设置值。怎么样?
键值编码使用Objective-C运行时查找getter和setter方法,并在实例设置器不存在的情况下查找实例变量的类型和位置。有关详细分析,请参见Friday Q&A 2013-02-08: Let's Build Key-Value Coding。
Apple文档简要描述了键值观察here的实现。足够简短地完整引用:
使用称为的技术实现自动键值观察 isa-swiizzling 。
顾名思义,
isa
指针指向对象的类 它维护一个调度表。该分派表本质上 包含指向该类实现的方法的指针 数据。注册观察者以获取对象的属性时,isa 观察对象的指针被修改,指向 中产阶级而不是真正的阶级。结果是 isa指针的值不一定反映实际的类 实例。
永远不要依靠
isa
指针来确定类 成员资格。相反,您应该使用class
方法来确定 对象实例的类。
Mike Ash在Friday Q&A 2009-01-23中进行了更详细的分析。
是吗 TypeSafe以及如何?
不是特别安全的类型。例如,这不会阻止您在声明为UIView
的属性中存储NSString
,反之亦然。
它是一个目标-C功能,然后为何仍在 Swift 4具有./Type.property访问和设置的最新改进
之所以一直使用它,是因为Apple的大多数SDK仍在Objective-C中实现,并且因为它可以让您完成在Swift中没有更多“样板”(手动,重复性功能)无法完成的工作。需要权衡的是,Objective-C的性能较低。在很多情况下,与Swift相比,Objective-C的性能降低并不是一个重大问题,而动态性的提高非常有帮助。