2010-12-16 52 views
0


我有这个可变数组:
如何取消分配NSMutableArray中的对象?

NSMutableArray *points = [pgroute getPoints:self]; 

其中[getPoint...]做到这一点:

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

现在,
点是对象的数组,对不对?

以这种方式释放*点数组是正确的吗?

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

还是这是另一种正确的方法?

Xcode的编译器,具有RUN_CLANG_STATIC_ANALYZER告诉我有没有被调用者

在这一点上拥有 对象的引用 计数的

不正确的减量我该如何解决这个?

谢谢,
alberto。

+0

如果你想记忆自己管理'NSMutableArray',你应该考虑重命名你的方法,使它包含单词'new'。这符合Apple的命名约定,任何具有'alloc','init','new'或'copy'的方法都会返回必须手动释放的对象。 – BoltClock 2010-12-16 10:26:35

回答

2

如果要清空数组,只是这样做:

[points removeAllObjects]; 

如果你要释放的数组,你甚至可以跳过,然后释放马上:

[points release]; 

的数组将自行处理释放对象。然后,如果只是将NSString文字(@"using this notation")添加到数组中,则它们不需要被释放,因为它们是常量。当然,这是一个不同的故事。我的意思是,NSMutableArray将处理在你需要的地方发布的东西。

+0

removeAllObjects,删除所有对象的引用?它释放n个对象? – elp 2010-12-16 10:33:44

+0

@pask:是的,当你从数组中移除一个对象时,它释放它指向该对象的指针。 – BoltClock 2010-12-16 10:34:50