创建一个NSMutableArray来保存指针

时间:2012-12-05 20:55:34

标签: objective-c ios xcode

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

提前致谢

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

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

使用不同的init参数再次进行上述调用。

2 个答案:

答案 0 :(得分:4)

数组总是存储指针....它包含对它的强引用或向它发送一条保留消息(如果使用非ARC)。

所以

[myMutableArray addObject: anObject];

将指针添加到它。

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

修改

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

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

而不是

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

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

[myObject updateParameter1: anotherOne parameterTwo: anotherTwo];

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

答案 1 :(得分:0)

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

您可以使用的方法是:

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

所以它看起来像是:

NewViewController *new = [[NewViewController alloc] init..];
[myArray replaceObjectAtIndex:x withObject:new];