【问题标题】:What is the purpose of instance variables?实例变量的目的是什么?
【发布时间】:2012-04-14 21:22:18
【问题描述】:

我看到这样的代码:

@synthesize dataController = _dataController;

在视图控制器中这样做的目的是什么?

【问题讨论】:

  • 请参见此处:stackoverflow.com/questions/2114587/… -- 不过看起来与您的问题有点不同。我也想知道为什么有些人还同时声明了一个iVar,当你可以完美地使用类中的属性时......
  • =@synthesize 结合使用,允许您创建与实际iVar 不同的属性名称。在您的示例中,作者使用将 _ 放在私有变量之前的样式。但是,调用[myClass _iVar] 看起来不如[myClass iVar] 好,所以设置@synthesize _dataController = dataController 允许_dataController 从其他类作为dataController 访问,使其更具可读性。

标签: objective-c ios


【解决方案1】:

如果你的类需要存储值,它需要在内存中的某个地方来存储这些数据。实例变量为您的类需要的数据保留内存。

假设您要为字符串或int 变量添加一个位置。您可以使用实例变量为对象的生命周期保留该内存。每个对象都将为其变量接收唯一的内存。

这很像 C struct:

struct t_something {
  int a; int b;
};

struct 声明了两个字段(a 和 b)。每个值都可以读取和写入,struct 大到足以容纳其字段。

【讨论】:

    【解决方案2】:

    我用它来快速访问数据,属性需要写“自我”。以前,vars 不会。

    【讨论】:

    • 你不必写 self.如果没有其他同名的 iVar,则访问属性。
    • 是的,我忘记了,但我认为不写 self 是非常非常糟糕的风格。与属性。因此,我们有很好的能力在阅读代码时快速区分属性和数据变量。
    • @allaire:是的,你知道。当您省略 self 时,您将直接访问 ivar — 如果您未指定 ivar 名称,则会使用同名的 ivar。
    【解决方案3】:

    这里有大量信息: iPhone ivar naming convention

    要记住的另一件事:

    在您的类中使用实例变量而不是属性会绕过通常会自动发生的属性实现的任何副作用(保留、复制等)。

    如果您编写了想要绕过的自定义属性实现,这一点尤其重要。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-21
      • 2013-05-17
      • 2012-10-20
      • 1970-01-01
      • 2010-10-19
      • 2012-08-13
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多