0

我试图向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 对象?

4

3 回答 3

3

每次我想使用一个新对象时,我是否应该分配一个新的 TestObject 对象?

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

于 2012-05-10T09:58:29.420 回答
2

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

于 2012-05-10T10:06:08.777 回答
1

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

于 2012-05-10T09:58:23.070 回答