在Objective-C的Apple编程中,Encapsulating Data的部分规定:
@H_403_3@You Can Define Instance Variables without Properties @H_403_3@It’s best practice to use a property on an object any time you need to keep track of a value or another object.@H_403_3@换句话说,他们强烈建议您使用私有属性而不是任何私有对象状态的实例变量. @H_403_3@我想知道为什么会这样呢?我知道属性具有KVO和属性(强,弱等)的功能,但在许多情况下,我不需要这些功能,实例变量将正常工作. @H_403_3@有没有什么好的理由为什么实例变量可能不被认为是最佳实践?
解决方法
即使现在您的私有变量可能作为一个简单的变量,您可以稍后决定一些属性的好东西是有用的:
@H_403_3@观察
原子访问器
>自定义访问器
>登录访问
>从子类访问 @H_403_3@如果您只将变量作为属性访问,则不会增加太多开销(除了紧密循环),并为获得上述任何优点留出空间. @H_403_3@基本上,属性是有用的,即使你不打算让他们公开. @H_403_3@当然,有一些使用实例变量仍然是“更自然”的地方,例如,如果您在类集群(例如NSArray)中重新实现了基础类,那么预计您的实现是私有的,而且不会执行然后使用属性. @H_403_3@此外,我不认为你应该读取太多的建议.对我来说,它更像是“如果你只在5分钟前学到关于属性和实例变量的知识,那就先从使用属性开始吧”. @H_403_3@对于语言新手的人,不用了解实例变量就可以走得更远.
原子访问器
>自定义访问器
>登录访问
>从子类访问 @H_403_3@如果您只将变量作为属性访问,则不会增加太多开销(除了紧密循环),并为获得上述任何优点留出空间. @H_403_3@基本上,属性是有用的,即使你不打算让他们公开. @H_403_3@当然,有一些使用实例变量仍然是“更自然”的地方,例如,如果您在类集群(例如NSArray)中重新实现了基础类,那么预计您的实现是私有的,而且不会执行然后使用属性. @H_403_3@此外,我不认为你应该读取太多的建议.对我来说,它更像是“如果你只在5分钟前学到关于属性和实例变量的知识,那就先从使用属性开始吧”. @H_403_3@对于语言新手的人,不用了解实例变量就可以走得更远.