对象在NSMutableArray中重复

时间:2012-05-10 09:50:31

标签: ios xcode nsmutablearray nsarray

我试图将一个对象添加到NSMutableArray,它似乎重复了。

@interface TestObject : NSObject {
    double a_actual;
    double a_target;
}
@property(assign) double a_actual;
@property(assign) double a_target;

创建一些指针:

NSMutableArray * myTestObjectArray;
TestObject * myTestObject;

初始化他们:

myTestObjectArray = [[NSMutableArray alloc] init];
myTestObject = [[TestObject alloc] init];

我为对象添加值并将其添加到数组中:

[myTestObject setA_actual:234];
[myJointDataArray insertObject:myTestObject];

我为每个对象添加不同的值,但我不一定要填写所有变量。 当我打印出每个对象时,由于某种原因,我在所有对象中都有相同的(最后)值。

打印阵列显示所有对象都相同:

 Array: (
     "<TestObject: 0x6b9b400>",
     "<TestObject: 0x6b9b400>",
     "<TestObject: 0x6b9b400>",
     "<TestObject: 0x6b9b400>",
     "<TestObject: 0x6b9b400>",
     "<TestObject: 0x6b9b400>" )

每次我想使用新的?

时,我应该分配一个TestObject的新对象吗?

3 个答案:

答案 0 :(得分:3)

  

每次我想使用新的?

时,我应该分配一个TestObject的新对象吗?

是。如果您没有分配新对象,那么您只是一遍又一遍地使用同一个对象。您似乎需要多个不同的对象,因此为每个对象分配一个新实例。

答案 1 :(得分:2)

为了让你更清楚它失败的原因,请考虑insertObject:将指向对象的指针作为参数。因此,当您将insertObject:消息发送到您的数组时,它将存储指向该对象的指针,而不是该对象本身的副本。这就是你必须分配/初始化它的新实例的原因。

答案 2 :(得分:1)

您基本上是添加相同的对象。如果检查数组中每个对象的“a_actual”值,您会看到它是相同的。 您应该分配一个新的