2012-04-14 57 views
1

我看到这样的代码:实例变量的目的是什么?

@synthesize dataController = _dataController;

什么是这个在视图控制器的目的是什么?

+1

看到这里:http://stackoverflow.com/questions/2114587/iphone-ivar-naming-convention - 虽然看起来有点不同于你的问题。我也想知道为什么有些人同时也声明了一个iVar,当你可以完美地使用该类中的属性时... – allaire 2012-04-14 21:30:19

+0

对@ @ synthesize使用'=',可以让你创建属性名称,与实际的iVar相同。在你的例子中,作者使用在私有变量之前放置'_'的样式。然而,调用'[myClass _iVar]'看起来不如'[myClass iVar]'好,所以把'@synthesize _dataController = dataController'允许'_dataController'作为其他类的'dataController'来访问,使它成为一个更可读性更强。 – wquist 2012-04-14 22:13:01

回答

2

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

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

这很像一个C struct

struct t_something { 
    int a; int b; 
}; 

struct声明了两个字段(A和B)。每个值都可以被读取和写入,而且其大小足以容纳其字段。

+0

谢谢,这有助于。 – Mattbettinson 2012-04-14 22:11:26

+0

@Mattbettinson不客气 – justin 2012-04-14 23:16:52

0

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

的另一件事要记住:

使用实例变量,而不是在你的类属性绕过的财产实施任何副作用(保留,复制等),通常会自动发生。

如果您写了一个您希望绕过的自定义属性实现,这可能尤其重要。

0

我用它来快速访问数据,属性需要写“自我”。之前,瓦尔斯没有。

+0

你不必自己写。如果没有其他具有相同名称的iVar,则访问该属性。 – allaire 2012-04-14 21:40:16

+0

是的,我忘了它,但我认为这是非常非常糟糕的风格,不写自我。与属性。因此,在阅读代码时,我们有很好的能够快速区分数据变量的属性。 – faviomob 2012-04-14 21:56:49

+1

@allaire:是的,你这样做。当你省略“self”时,你直接访问ivar--如果你没有指定ivar名称,则使用同名的ivar。 – Chuck 2012-04-15 08:05:56

相关问题