2

我在 ARC 之前做了很多 iOS 开发。现在有了 ARC,我注意到 Apple 生成的代码使用的是实例变量而不是属性。这是为什么?

例如一个主从视图控制器 - 在 DetailView 我们看到:

- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
    _detailItem = newDetailItem;

    // Update the view.
    [self configureView];
}
}

为什么不 self.detailItem = newDetailItem;?当我第一次学习 iOS 开发时,推荐使用属性。

4

2 回答 2

8

它将创建一个不定式递归循环。由于 self.detailItem = obj; 调用:

- (void)setDetailItem:(id)newDetailItem

关于“_”,当您不对其进行合成时,它是变量的命名方式。您可以根据需要更改它,尽管我认为没有理由这样做。

于 2013-10-15T16:49:39.527 回答
5

self.detailItem = newDetailItem;[self setDetailItem:newDetailItem];

所以这会导致堆栈溢出。

当您声明一个属性时,它已经为实例变量定义了 getter 和 setter(除非它在一个类别中)。因此,如果您必须自定义 getter 或 setter,则需要直接访问实例变量。

于 2013-10-15T16:51:01.810 回答