当您尝试将属性设置为nil时,将调用键值编码方法setNilValueForKey:方法。
到目前为止听起来不错
...使用setValue:forKey:设置新值。这样可以保持模型的封装,并确保实际发生因设置值而发生的任何其他操作。 这被认为是比调用访问器方法或直接设置实例变量更好的做法。
为什么在基元或值类型属性上设置'default'值时,在-setValue:forKey:
方法中调用-setNilValueForKey:
更好?使用与属性访问器相对的KVC方法-setValue:forKey:
是否有性能或技术优势(我假设当它说accessor方法时它也适用于访问器属性,因为它们只是方法的合成糖)?通常,当Apple建议采用“最佳实践”时,需要考虑性能或可靠性。有没有人知道记录的理由为什么?
答案 0 :(得分:3)
来自你的引言:
这样可以保持模型的封装,并确保实际发生因设置值而发生的任何其他操作。
调用setValue:forKey:
代替访问者或更改ivar可确保维持所有正确的副作用。当引用提到维护封装时,它意味着保留KVC方法而不是自定义访问器。调用setValue:forKey:
也意味着您可以让运行时决定如何为您设置属性。最后,“附加行动”可能指的是键值观察。它将确保调用正确的方法,而不是任何不应该被调用的方法。