我是Objective-C的新手,所以如果这个问题很愚蠢,请原谅我!但我想知道这意味着什么。
- (void)setDetailItem:(id)newDetailItem
{
if (_detailItem != newDetailItem) {
_detailItem = newDetailItem;
// Update the view.
[self configureView];
}
}
这些线在详细视图控制器中的作用是什么?这是否意味着创建了一个新对象,即newDetailItem
并将其分配给现有的detailItem
?我不明白这个想法。
OR
它实际上是否意味着这个新对象等于" detailItem"中出现的细节。已经。所以,不应该将其写为newDetailItem = _detailItem
,以便这个新对象获得_detailItem
的值?
这让我有点困惑:(
谢谢你的时间!
答案 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
。