【问题标题】:How to deallocate objects in NSMutableArray?如何释放 NSMutableArray 中的对象?
【发布时间】:2010-12-16 10:14:44
【问题描述】:


我有这个可变数组:

NSMutableArray *points = [pgroute getPoints:self];

[getPoint...] 这样做:

{
 NSMutableArray *normPoints = [[NSMutableArray alloc] init];
 [normPoints addObject:@""];
 [...]
 return normPoints;
}

现在,
points 是一个对象数组,对吧?

以这种方式释放*points数组是否正确?

for (int i = 0; i < [points count]; i++) {
    [(NSString *)[points objectAtIndex:i] release];
}
[points release];

还是另一种正确的方式?

Xcode 编译器,用RUN_CLANG_STATIC_ANALYZER 告诉我有一个

引用减量不正确 不拥有的对象的计数 此时由调用者

我该如何解决这个问题?

谢谢,
阿尔贝托。

【问题讨论】:

  • 如果您想自己管理 NSMutableArray,您应该考虑重命名您的方法,使其包含单词 new。这是为了遵守 Apple 的命名约定,即任何带有 allocinitnewcopy 的方法都返回必须手动释放的对象。

标签: objective-c object nsstring nsmutablearray release


【解决方案1】:

如果你想清空数组,只需这样做:

[points removeAllObjects];

如果你想释放数组,你甚至可以跳过它并立即释放它:

[points release];

数组将自行处理释放对象。再说一次,如果您只是将 NSString 文字 (@"using this notation") 添加到数组中,则不需要释放它们,因为它们是常量。那当然是另一回事了。我的意思是,NSMutableArray 会在你需要的地方发布一些东西。

【讨论】:

  • removeAllObjects,是否也删除所有对象引用?它释放了n个对象?
  • @pask:是的,当您从数组中删除一个对象时,它会释放指向该对象的指针。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多