将值添加到NSMutableArray后,将值设置为NSObject类型的对象

时间:2014-02-03 07:02:30

标签: iphone objective-c nsobject

我创建了一个名为Tutoral的类,它是NSObject的子类,它具有以下综合属性Title和Url。然后在我的viewcontroller中我创建了Tutorial类的一个实例。我还创建了一个{ {1}}对象并初始化。我将我的教程对象实例添加到数组中。然后我设置Title =“mytitle”和Url =“myurl”等属性。在另一个地方,我从数组中获取了教程对象实例,并NSMutableArray获取了其Title和Url属性值。它分别显示了“mytitle”和“myurl”。 我的困惑是为什么arry里面的教程对象实例显示了它的属性值。在将该对象添加到数组之后设置教程对象属性。 Follwing是我测试过的代码。

NSLog

2 个答案:

答案 0 :(得分:2)

将对象添加到数组时,该数组只保留对该对象的引用(指针)。它没有创建该对象的副本。

因此,在上面的代码示例中,您始终处理Tutorial的相同实例:

  • 首先,您使用Tutorialalloc创建一个新的init,并使用tutorial指针存储对它的引用。
  • 然后将其添加到您的阵列中。您的数组保留对象,这意味着它保留对它的引用。
  • 然后设置现有对象的titleurl属性。
  • 然后,您获取另一个相同对象的引用,并将其命名为objNew。通过向数组请求指向其第一个对象的指针来获得此引用。
  • 然后打印对象的属性。

答案 1 :(得分:0)

执行以下代码行时,

[newTutorials addObject:tutorial];

它的作用是,它将您在上一行中创建的教程对象的地址(参考)添加到数组newTutorials

您的困惑是:“您没有为数组中的教程对象设置值,但为什么显示 mytitle myurl 当你NSLog修改教程的时候?“答案很简单“你没有将教程对象存储在数组中,但是你已经存储了对教程对象的引用

因为当你存储了引用并且你已经完成了以下教程对象:

tutorial.title = @"mytitle";

tutorial.url = @"myurl";

当您尝试打印存储在数组中的引用的属性时,它会打印 mytitle myurl ,因为这是您为实际对象的属性分配的内容