【发布时间】:2014-01-12 12:40:32
【问题描述】:
在 Apple 的 Programming with Objective-C 中,Encapsulating Data 部分指出:
您可以在没有属性的情况下定义实例变量
当您需要跟踪一个值或另一个对象时,最好在对象上使用属性。
换句话说,他们强烈建议您对任何私有对象状态使用私有属性而不是实例变量。
我想知道为什么会这样?我知道属性具有 KVO 等特性和属性(强、弱......),但在许多情况下我不需要这些特性,实例变量就可以正常工作。
实例变量可能不被视为最佳实践有什么好的理由吗?
【问题讨论】:
-
对于我的拙见,这是 Apple 的魅力——他们不会说“你可以”,而是说“你应该”:)
-
总结 cmets 中的讨论并仔细阅读原文:Apple 没有说 私有变量是不好的做法,他们说 一般来说属性是最好的练习。而且,它是针对刚刚学习实例变量的人的一般性建议。
-
这里有很多很好的一般性讨论:stackoverflow.com/questions/10432441/… 以及我相信已经回答了有关 Apple 文本的具体问题 :)
-
@ilyan。 - 感谢您的参考,虽然答案很弱“我相信现在(对于 ARC)的建议是使用属性来声明您的外部接口,但使用直接实例变量,其中变量是对象内部状态的一部分。” - 我很想看到这个建议的引用!
-
要添加其他内容,使用属性时性能会受到轻微影响(因为您随后发送消息,而不是引用特定指针)。这通常是完全无关紧要的,但我曾经有过明显的差异(即紧密嵌套的循环,例如用于图像处理)。我很感激有一些方法可以解决这个问题,但这是值得考虑的事情。
标签: ios objective-c cocoa instance-variables