我创建了一个名为Tutoral的类,它是NSObject
的子类,它具有以下综合属性Title和Url。然后在我的viewcontroller中我创建了Tutorial类的一个实例。我还创建了一个{ {1}}对象并初始化。我将我的教程对象实例添加到数组中。然后我设置Title =“mytitle”和Url =“myurl”等属性。在另一个地方,我从数组中获取了教程对象实例,并NSMutableArray
获取了其Title和Url属性值。它分别显示了“mytitle”和“myurl”。
我的困惑是为什么arry里面的教程对象实例显示了它的属性值。在将该对象添加到数组之后设置教程对象属性。 Follwing是我测试过的代码。
NSLog
答案 0 :(得分:2)
将对象添加到数组时,该数组只保留对该对象的引用(指针)。它没有创建该对象的副本。
因此,在上面的代码示例中,您始终处理Tutorial
的相同实例:
Tutorial
和alloc
创建一个新的init
,并使用tutorial
指针存储对它的引用。title
和url
属性。objNew
。通过向数组请求指向其第一个对象的指针来获得此引用。答案 1 :(得分:0)
执行以下代码行时,
[newTutorials addObject:tutorial];
它的作用是,它将您在上一行中创建的教程对象的地址(参考)添加到数组newTutorials 。
您的困惑是:“您没有为数组中的教程对象设置值,但为什么显示 mytitle 和 myurl 当你NSLog
修改教程的时候?“答案很简单“你没有将教程对象存储在数组中,但是你已经存储了对教程对象的引用”
因为当你存储了引用并且你已经完成了以下教程对象:
tutorial.title = @"mytitle";
tutorial.url = @"myurl";
当您尝试打印存储在数组中的引用的属性时,它会打印 mytitle 和 myurl ,因为这是您为实际对象的属性分配的内容