Objective c KVC setNilValueForKey:建议调用方法而不使用属性访问器

Objective c KVC setNilValueForKey:建议调用方法而不使用属性访问器,objective-c,ios,cocoa,key-value-coding,Objective C,Ios,Cocoa,Key Value Coding,警察说 当您尝试将属性设置为nil时,将调用键值编码方法setNilValueForKey:method 到目前为止听起来不错 。。。使用setValue:forKey:设置新值。这将保持模型的封装,并确保由于设置值而应发生的任何附加操作都将实际发生这被认为是比调用访问器方法或直接设置实例变量更好的做法。 在原语或值类型属性上设置“默认”值时,为什么在-setNilValueForKey:方法中调用-setValue:forKey:更好?使用KVC方法-setValue:forKey:与属性访问

警察说

当您尝试将属性设置为nil时,将调用键值编码方法setNilValueForKey:method

到目前为止听起来不错

。。。使用setValue:forKey:设置新值。这将保持模型的封装,并确保由于设置值而应发生的任何附加操作都将实际发生这被认为是比调用访问器方法或直接设置实例变量更好的做法。

在原语或值类型属性上设置“默认”值时,为什么在
-setNilValueForKey:
方法中调用
-setValue:forKey:
更好?使用KVC方法
-setValue:forKey:
与属性访问器相反是否有性能或技术优势(我假设当它说访问器方法时,它也适用于访问器属性,因为它们只是方法上的同步糖)?通常,当苹果推荐“最佳实践”时,会有一个性能或可靠性问题支持它。有人知道原因吗

从您的报价中:

这将保持模型的封装,并确保由于设置值而应发生的任何附加操作都将实际发生


调用
setValue:forKey:
而不是访问器或更改ivar可确保维持所有适当的副作用。当引用提到维护封装时,它意味着保留KVC方法而不是自定义访问器。调用
setValue:forKey:
还意味着您需要运行时来决定如何为您设置属性。最后,“额外行动”可能是指关键价值观。它将确保调用正确的方法,而不是任何不应该调用的方法。

我实施了KVC建议,并学到了一些新的东西,在我能找到的任何地方都没有提到,包括您的答案;)调用
setValue:forKey:
在原语上设置默认值实际上是在属性setter通过两个神奇的KVC方法后调用它。您的答案肯定有帮助,但您可能希望更新它以反映这一点,因为它可能有助于其他人理解所有这些片段是如何组合在一起的。@来自的RyanR:“键值编码尝试在直接访问实例变量之前使用访问器方法获取和设置值。”这就是我所说的“调用
setValue:forKey:
也意味着您需要运行时来决定如何为您设置属性。”您的句柄无法键入,哇。我不敢相信我在指南中错过了,再次感谢你。