我正在尝试在目标 c 中创建一个可变数组来保存对对象的引用。数组中的对象通过用户交互定期更新,我希望数组在对象发生时自动反映对对象所做的更改。有谁知道是否有办法做到这一点?也许存储指向对象的指针而不是数组中的对象本身?任何帮助将非常感激
提前致谢
编辑:我应该提到,严格意义上的对象并没有被更新。它们正在重新初始化。例如,如果我有一个控制器:
MyController = [MyController alloc] initWith.....]]
使用不同的初始化参数再次进行上述调用。
我正在尝试在目标 c 中创建一个可变数组来保存对对象的引用。数组中的对象通过用户交互定期更新,我希望数组在对象发生时自动反映对对象所做的更改。有谁知道是否有办法做到这一点?也许存储指向对象的指针而不是数组中的对象本身?任何帮助将非常感激
提前致谢
编辑:我应该提到,严格意义上的对象并没有被更新。它们正在重新初始化。例如,如果我有一个控制器:
MyController = [MyController alloc] initWith.....]]
使用不同的初始化参数再次进行上述调用。
该数组始终存储指针......它持有对它的强引用或向其发送保留消息(如果使用非 ARC)。
所以
[myMutableArray addObject: anObject];
添加指向它的指针。
如果您现在更改对象的属性并稍后通过数组访问它,它将为您提供指向该对象及其属性更改的指针。
编辑:
不,如果您分配/初始化,您正在创建一个新对象实例并在堆上为其分配新内存(即,它是另一个指向新内存地址的指针)。你到底想完成什么?如果您提供更多细节,肯定有一种方法。
如果您分配/初始化具有相同类的对象,为什么不创建一个方法来更改对象的属性:
代替
myObject = [[MyClass alloc] initWithParameter1: one parameter2: two];
您可以创建一个更改这些属性的方法:
[myObject updateParameter1: anotherOne parameterTwo: anotherTwo];
而且,当然,可变数组的优点是,您可以更改其内容,所以就像@Eli Gregory 指出的那样,您可以用另一个对象(或者更确切地说是指向它的指针)替换一个对象。
因为你想指向一个新分配和初始化的对象,你不能“更新”指针,你可以做的是用某个索引处的新指针“替换”指针。
您可以用来执行此操作的方法是:
- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject
所以它看起来像:
NewViewController *new = [[NewViewController alloc] init..];
[myArray replaceObjectAtIndex:x withObject:new];