我想知道kvo在swift中的使用,正如我在apple doc或任何其他在线文章中读到的那样,它声明它提供了对属性的间接访问,并且可以通过字符串寻址。我有一系列疑问。
如果我可以直接通过person.name=“john”设置属性,他们为什么要间接使用key name=“john”的设置值
apple doc表示,与关键值编码兼容的技术可以广泛应用于像核心数据这样的可可技术中。为什么在其他框架中没有使用它
它在运行时或动态期间用于设置值。怎么样?
是不是打字安全,怎么打?
这是一个objective-c特性,那么为什么在swift 4中仍然使用,并对./type.property访问和设置进行了最新改进

最佳答案

如果我可以直接通过person.name=“john”设置属性,为什么
间接使用key name=“john”的设置值
请阅读“What is the point of key-value coding?”
苹果医生说
密钥值编码兼容可以参与多种cocoa
核心数据等技术。为什么在其他框架中没有使用它
在适当的地方使用。它用于有帮助且性能可接受的地方。如果它没用,或者性能太低,就不使用它。
它在运行时或动态期间用于设置值。怎么样?
键值编码使用Objut-C运行时查找GETTER和SETTER方法,并在不存在设置器的情况下查找实例变量的类型和位置。有关详细分析,请参见Friday Q&A 2013-02-08: Let's Build Key-Value Coding
apple文档简要描述了key-value-observationhere的实现。它很短,完全可以引用:
自动键值观察是使用一种称为
令人毛骨悚然。
顾名思义,isa指针指向对象的类
它维护一个调度表。这个调度表本质上
包含指向类实现的方法的指针,以及
数据。
当观察者注册一个对象的属性时,isa
观察对象的指针被修改,指向
中间阶级而不是真正的阶级。因此
isa指针的值不一定反映实际的类
实例的。
您不应该依赖isa指针来确定类
会员。相反,您应该使用class方法来确定
对象实例的类。
mike ash在Friday Q&A 2009-01-23中给出了更详细的分析。
它是
打字安全,怎么做?
它不是特别的类型安全。例如,它不会阻止您在声明为UIView的属性中存储NSString,反之亦然。
这是一个objective-c特性,那么为什么在
swift 4,具有最新的改进,带有./type.property访问和设置
它仍然被使用,因为苹果的大部分sdk仍然是在objective-c中实现的,并且因为它让你可以在没有更多“样板文件”(手工的,重复的功能)的情况下快速完成你不能做的事情。取而代之的是,目标c是较低的性能。在许多情况下,与swift相比,objective-c的性能较低并不是一个显著的问题,而增加的动态性是非常有帮助的。

关于swift - Swift中键值编码的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53407131/

10-12 00:15
查看更多