0

我正在尝试在目标 c 中创建一个可变数组来保存对对象的引用。数组中的对象通过用户交互定期更新,我希望数组在对象发生时自动反映对对象所做的更改。有谁知道是否有办法做到这一点?也许存储指向对象的指针而不是数组中的对象本身?任何帮助将非常感激

提前致谢

编辑:我应该提到,严格意义上的对象并没有被更新。它们正在重新初始化。例如,如果我有一个控制器:

MyController = [MyController alloc] initWith.....]]

使用不同的初始化参数再次进行上述调用。

4

2 回答 2

4

该数组始终存储指针......它持有对它的强引用或向其发送保留消息(如果使用非 ARC)。

所以

[myMutableArray addObject: anObject];

添加指向它的指针。

如果您现在更改对象的属性并稍后通过数组访问它,它将为您提供指向该对象及其属性更改的指针。

编辑:

不,如果您分配/初始化,您正在创建一个新对象实例并在堆上为其分配新内存(即,它是另一个指向新内存地址的指针)。你到底想完成什么?如果您提供更多细节,肯定有一种方法。

如果您分配/初始化具有相同类的对象,为什么不创建一个方法来更改对象的属性:

代替

myObject = [[MyClass alloc] initWithParameter1: one parameter2: two];

您可以创建一个更改这些属性的方法:

[myObject updateParameter1: anotherOne parameterTwo: anotherTwo];

而且,当然,可变数组的优点是,您可以更改其内容,所以就像@Eli Gregory 指出的那样,您可以用另一个对象(或者更确切地说是指向它的指针)替换一个对象。

于 2012-12-05T20:56:53.473 回答
0

因为你想指向一个新分配和初始化的对象,你不能“更新”指针,你可以做的是用某个索引处的新指针“替换”指针。

您可以用来执行此操作的方法是:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject

所以它看起来像:

NewViewController *new = [[NewViewController alloc] init..];
[myArray replaceObjectAtIndex:x withObject:new];
于 2012-12-05T21:13:59.287 回答