释放从参数创建的数组

时间:2010-05-28 15:32:45

标签: objective-c arrays release

如何释放从参数创建的数组?

我的功能如

-(NSMutableArray*)composePhrase:(NSString*) phraseLiteral{
   ...
   NSArray* wordLiterals=[phraseLiteral componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[]"]];
   ...
   [wordLiterals release];
}

我总是遇到这个版本的问题。有人能告诉我如何做对吗?

2 个答案:

答案 0 :(得分:2)

您需要了解Object Ownership Policy

当方法名称包含allocnewcopy时,您才会自动获得所有权。在这里,componentsSperatedByCharactersInSet:没有。因此,返回的wordLiterals不归您所有。它是自动释放的。你不应该release它。当当前事件循环完成时,当自动释放池耗尽时,它会自动释放。

如果你想保留对象,你可以retain。然后你拥有它。当您不再需要它时,您release

答案 1 :(得分:0)

componentsSeparatedByCharactersInSet:...返回的数组是自动释放的。对于几乎所有这样创建的对象都是如此 - 即,不是通过alloccopy

如果你想保留它,你应该自己retain。否则它将在某个未指定的未来时间消失(或者如果不是,则不是你的责任)。

在你不拥有的东西上调用release将不可避免地导致悲伤,所以不要这样做。在这种情况下,由于您似乎只在同一范围内使用它,您可以让它自己处理。