【问题标题】:Creating a NSMutableArray to hold pointers创建一个 NSMutableArray 来保存指针
【发布时间】:2012-12-05 20:55:34
【问题描述】:

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

提前致谢

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

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

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

【问题讨论】:

  • array 只是一个存储数据的容器。您需要为每个将接收更新的对象设置一个委托。

标签: objective-c ios xcode


【解决方案1】:

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

所以

[myMutableArray addObject: anObject];

添加指向它的指针。

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

编辑:

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

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

而不是

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

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

[myObject updateParameter1: anotherOne parameterTwo: anotherTwo];

当然,可变数组的优势在于,您可以更改其内容,因此就像@Eli Gregory 指出的那样,您可以将一个对象替换为另一个对象(或者更确切地说是指向它的指针)。

【讨论】:

  • 我认为问题是 OP 正在创建一个新实例,而不仅仅是更改同一对象的属性(他称之为“重新初始化”)。
  • 我不确定它是否是一个新实例,但它已分配给相同的属性
  • 基本上我有一个页面控制器数组。一旦用户在该页面上编辑了一个单元格并返回到该页面,每个控制器都会使用新数据重新初始化以显示,例如每个部分的更多单元格,具体取决于用户响应。我希望能够保留一组引用正确对象的这些控制器
  • 我不确定它是否是一个新实例你的问题。您需要退后一步,了解对象引用和alloc 的工作原理。
  • 一旦我修改了参数,对对象的引用应该保持不变对吗?所以该数组现在仍将保持相同的引用,不同之处在于控制器的属性现在将发生变化?
【解决方案2】:

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

您可以使用的方法是:

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

所以它看起来像:

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

【讨论】:

  • 是的,但是我需要一个对数组中陈旧条目的引用才能用新的引用替换它
猜你喜欢
  • 2020-09-13
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多