当从使用NSMutableArray
动态构建数组的方法返回NSArray
(或NSDictionary
等)时,如何遵循标准方式并在使用ARC时避免随机内存泄漏?
例如,我们有一个带有名称列表的类,并且我们想要手动过滤并获取所有以给定字母开头的名称:
- (NSArray *)getNamesByFirstLetter:(NSString *)firstLetter
{
NSMutableArray *returnValue = [[NSMutableArray alloc] init];
for(id item in self.names)
{
if([item hasPrefix:firstLetter])
{
[returnValue addObject:item];
}
}
return returnValue; // just return the above array
}
谈到返回值,我能想到四种可能的方法:
直接返回
NSMutableArray
(如上所示)
return returnValue;
返回一个副本
return [returnValue copy];
使用NSArray arrayWithArray
进行返回:
return [NSArray arrayWithArray:returnValue];
创建一个NSArray
,手动将NSMutableArray
设置为nil
:
NSArray *temp = [NSArray arrayWithArray:returnValue]; // could use [returnValue copy] here too
returnValue = nil;
return temp;
当程序使用ARC时,这四种方法之间是否有任何实际区别,还是只是个人喜好的问题?此外,除了可能存在内存泄漏之外,使用一种方法而不是另一种方法还有其他影响吗?
请注意,如果这是一个重复的问题,请让我知道,我会把这个问题撤下。我试着搜索过,但很难用几个关键词概括这个问题。