我似乎永远不会这样做。我有一个返回可变数组的方法。返回数组并避免潜在的内存泄漏的正确方法是什么?
如果我打算将结果本地存储在另一个视图控制器中,是否会影响数组的返回方式?
最后,如果它只是一个不可变的数组呢?这需要不同的技术吗?
感谢, 豪伊
答案 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
返回的数组,因为它是自动释放的。