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

时间:2011-06-25 20:48:19

标签: objective-c ios cocoa key-value-coding

KVC Documentation

  

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

到目前为止听起来不错

  

...使用setValue:forKey:设置新值。这样可以保持模型的封装,并确保实际发生因设置值而发生的任何其他操作。 这被认为是比调用访问器方法或直接设置实例变量更好的做法。

为什么在基元或值类型属性上设置'default'值时,在-setValue:forKey:方法中调用-setNilValueForKey:更好?使用与属性访问器相对的KVC方法-setValue:forKey:是否有性能或技术优势(我假设当它说accessor方法时它也适用于访问器属性,因为它们只是方法的合成糖)?通常,当Apple建议采用“最佳实践”时,需要考虑性能或可靠性。有没有人知道记录的理由为什么

1 个答案:

答案 0 :(得分:3)

来自你的引言:

  

这样可以保持模型的封装,并确保实际发生因设置值而发生的任何其他操作。

调用setValue:forKey:代替访问者或更改ivar可确保维持所有正确的副作用。当引用提到维护封装时,它意味着保留KVC方法而不是自定义访问器。调用setValue:forKey:也意味着您可以让运行时决定如何为您设置属性。最后,“附加行动”可能指的是键值观察。它将确保调用正确的方法,而不是任何不应该被调用的方法。