如何释放从参数创建的数组?
我的功能如
-(NSMutableArray*)composePhrase:(NSString*) phraseLiteral{
...
NSArray* wordLiterals=[phraseLiteral componentsSeparatedByCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"[]"]];
...
[wordLiterals release];
}
我总是遇到这个版本的问题。有人能告诉我如何做对吗?
答案 0 :(得分:2)
您需要了解Object Ownership Policy。
当方法名称包含alloc
,new
或copy
时,您才会自动获得所有权。在这里,componentsSperatedByCharactersInSet:
没有。因此,返回的wordLiterals
不归您所有。它是自动释放的。你不应该release
它。当当前事件循环完成时,当自动释放池耗尽时,它会自动释放。
如果你想保留对象,你可以retain
。然后你拥有它。当您不再需要它时,您release
。
答案 1 :(得分:0)
componentsSeparatedByCharactersInSet:...
返回的数组是自动释放的。对于几乎所有这样创建的对象都是如此 - 即,不是通过alloc
或copy
。
如果你想保留它,你应该自己retain
。否则它将在某个未指定的未来时间消失(或者如果不是,则不是你的责任)。
在你不拥有的东西上调用release
将不可避免地导致悲伤,所以不要这样做。在这种情况下,由于您似乎只在同一范围内使用它,您可以让它自己处理。