正确返回数组的方法

时间:2010-03-21 18:40:59

标签: cocoa methods nsmutablearray return-value return

我似乎永远不会这样做。我有一个返回可变数组的方法。返回数组并避免潜在的内存泄漏的正确方法是什么?

如果我打算将结果本地存储在另一个视图控制器中,是否会影响数组的返回方式?

最后,如果它只是一个不可变的数组呢?这需要不同的技术吗?

感谢, 豪伊

3 个答案:

答案 0 :(得分:4)

如果你的方法在名称中没有alloc或copy,那么正确的方法是返回一个自动释放的数组版本。此外,您应该返回数组的副本以防止修改本地副本

- (NSMutabalArray*] mutableArray {
    return [[myArray mutableCopy] autorelease];
}

- (NSArray*] array {
    return [[myArray copy] autorelease];
}

答案 1 :(得分:2)

返回自动释放的对象。如果您使用任何alloc / init / copy方法创建了数组 - 您应该在返回之前将自动释放消息发送到数组(类似return [myArray autorelease];)。否则,使用工厂方法(arrayFrom... arrayWithContentsOf...)创建的数组将返回自动释放的对象,因此您无需担心内存泄漏。

您应该阅读有关内存管理并保留苹果开发网站的信息。可能还有一些其他初始化方法会保留返回的对象,这会导致内存泄漏。

答案 2 :(得分:1)

对于NSMutableArray,我会使用:

-(NSMutableArray*)getMyArray
{
   NSMutableArray *retval = [[NSMutableArray alloc] init];
   // do your stuff w/ array
   return [retval autorelease];
}

此代码的调用者可能希望retain返回的数组,因为它是自动释放的。