1

我需要帮助解除我的 NSMutableArray 的自定义对象。我需要保留数组,所以我在 .h 中添加了一个属性,并在 .m 文件中的 dealloc 中释放它。当我将对象添加到数组时,我执行以下操作:

  myarray = [[NSMutableArray alloc] init];
  [myarray addObject:[[mycustomObject alloc]initWithObject:obj1]];
  [myarray addObject:[[mycustomObject alloc]initWithObject:obj2]];

现在,我不知道如何释放 mycustomobject。如果我执行以下操作:

   [myarray addObject:[[[mycustomObject alloc]initWithObject:obj1] autorelease]];

稍后访问数组时遇到问题。请指教。

4

2 回答 2

5

我认为您不了解 Cocoa 中的内存管理是如何工作的。数组会保留你添加到它的对象,当数组不再需要它们时(比如你释放数组时)它会自行释放它们。

换句话说,将自动释放的对象添加到数组中,之后不要担心它的保留计数。如果你想从数组中删除它,只需删除它(使用removeObjectAtIndex:或类似的东西)。如果您认为要释放对象而不将其从数组中删除,那么您做错了,因为这可能会在您的数组中留下一个悬空指针,这将导致您稍后崩溃。

您真的应该再次阅读文档,特别是关于Object Ownership and Disposal的部分。

于 2010-03-17T19:10:18.200 回答
3

正确的方法是让数组保持自定义对象的所有权:

NSMutableArray * array = [[NSMutabelArray alloc] init];

for (id obj in anArrayOfObjects) {
  mycustomObject * customObj = [[mycustomObject alloc] initWithObject:obj];
  [array addObject:customObj];
  [customObj release];
}

如果您以后在访问数组时遇到困难,那么您在数组的内存管理方面做错了。

于 2010-03-17T19:11:50.580 回答