2013-03-22 154 views
1

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

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

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

这些行完全在详细视图控制器中做了什么?这是否意味着创建了一个新对象,即newDetailItem并将其分配给已有的detailItem?我不明白这一点。

OR

其实是否意味着这个新对象是等于存在于“detailItem”已详情。所以,不应该把它写成newDetailItem = _detailItem,这样这个新对象将会得到_detailItem的值吗?

这样的困惑我有点:(

感谢您的时间!

+1

为什么不买书,开始学习obj-c或查找在线教程 – 2013-03-22 15:19:29

+0

我做了,但是这条线实际上让我困惑。所以我让自己扭曲了.. – Raj0689 2013-03-22 16:34:50

回答

5

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

这种方法一般是在调用的两种方法之一,可以显式:

[someObject setDetailItem:someDetailItem]; 

或经由点符号:

someObject.detailItem = someDetailItem; 

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

您的困惑似乎部分来自于参数名称“newDetailItem”。这里的名字是任意的,并不意味着正在创建任何东西。这是一种新的财产拥有的新价值,而不是新的对象。

+0

很好解释:) – 2013-03-22 15:25:57

+0

你能解释为什么我必须实现setDetailItem方法来更改DetailItem对象,在那里我不需要任何其他对象,如NSMutableString的任何方法.... – NULL 2013-03-22 15:37:49

+0

谢谢:)解决它。 – Raj0689 2013-03-22 16:34:07

1

这种方法设置新值newDetailItem_detailItem

在这种statment if (_detailItem != newDetailItem)这是通过比较存储位置来检查两者是否是同一物体。

_detailItem = newDetailItem; newDetai以id通过的项目为_detailItem

在ARC的情况下:该值被保留/复制为ARC,这未指定。

您直接通过_detailItem访问您的财产。您的班级中有一个名为detailItem的房产。

然后调用方法configureView