为什么Apple的实例变量被认为是不好的做法?

时间:2013-12-24 09:13:35

标签: ios objective-c cocoa instance-variables

在Apple的Objective-C编程中,Encapsulating Data部分指出:

  

您可以定义没有属性的实例变量

     

最佳做法是在需要跟踪值或其他对象时随时在对象上使用属性。

换句话说,他们强烈建议您使用私有属性而不是实例变量用于任何私有对象状态。

我想知道为什么会出现这种情况?我知道属性具有KVO和属性(强,弱......)等功能,但在很多情况下我不需要这些功能,实例变量也可以正常工作。

为什么实例变量可能不被视为最佳实践?

3 个答案:

答案 0 :(得分:3)

即使现在您的私有变量可能作为普通变量工作,您可能稍后会决定某些属性'goodies'是有用的:

  • 观察
  • 原子访问者
  • 自定义访问者
  • 登录访问
  • 从子类访问

如果您只将变量作为属性访问,则不会增加太多开销(紧密循环除外),并为获得上述任何好处留出空间。

基本上,即使你没有计划将它们公开,属性也很有用。

当然,有些地方使用实例变量仍然“更自然”,例如,如果您在类集群中重新实现Foundation类(例如NSArray),则预计您的实现是私有的,高性能,所以我不使用属性。

另外,我认为你不应该过多地阅读这些建议。对我而言,它更像是“如果你只是在5分钟前才知道属性和实例变量,那么首先让我们先使用属性”

对语言不熟悉的人可以在不知道实例变量的情况下走得很远。

答案 1 :(得分:1)

  

换句话说,他们强烈建议您使用私有属性而不是实例变量用于任何私有对象状态。

您在哪里读到他们推荐私人属性?我认为它们意味着公共变量/属性。

当然,使用属性而不是公共实例变量有很多优点:

  • 封装和自定义getter / setter
  • 内存管理
  • KVO
  • 二进制兼容性

但是在我看来,使用私有属性一般没有优势,并且使用私有实例变量要容易得多。我能想象的唯一原因是将来为这些变量制作自定义getter / setter,但我认为这不是“最佳实践”。

答案 2 :(得分:-1)

重点是存储抽象。如此简单但非常强大。