什么是setDetailItem:做什么?

时间:2013-03-22 15:11:05

标签: ios objective-c

我是Objective-C的新手,所以如果这个问题很愚蠢,请原谅我!但我想知道这意味着什么。

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

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

这些线在详细视图控制器中的作用是什么?这是否意味着创建了一个新对象,即newDetailItem并将其分配给现有的detailItem?我不明白这个想法。

OR

它实际上是否意味着这个新对象等于" detailItem"中出现的细节。已经。所以,不应该将其写为newDetailItem = _detailItem,以便这个新对象获得_detailItem的值?

这让我有点困惑:(

谢谢你的时间!

2 个答案:

答案 0 :(得分:5)

您展示的代码是“setter”的典型示例 - 一种为属性分配新值的方法;在这种情况下,称为“detailItem”的属性。

此方法通常以两种方式之一调用:显式:

[someObject setDetailItem:someDetailItem];

或通过点符号:

someObject.detailItem = someDetailItem;

_detailItem是一个实例变量,或“ivar”;它是一个对象本地的位置,其中实际存储了属性的值。此代码检查以确保分配的新值实际上与旧值不同,然后分配它并调用副作用,可能更新某些UI以显示新值。

您的困惑似乎部分源于此方法的参数名称“newDetailItem”。这里的名字是任意的,并不意味着正在创造任何东西。这是物业新价值的新意义,而非新物体。

答案 1 :(得分:1)

此方法设置新值newDetailItem_detailItem

在此语句if (_detailItem != newDetailItem)中,它通过比较内存位置来检查两者是否是同一个对象。

_detailItem = newDetailItem;中,将id传递的newDetailItem放入_detailItem

如果是ARC:保留/复制的值与ARC中一样,未指定。

您正在_detailItem直接访问您的媒体资源。您的班级中有一个名为detailItem的媒体资源。

然后调用方法configureView