При возврате NSArray
(или NSDictionary
и т. Д.) Из метода, который строит массив «на лету» с использованием NSMutableArray
, что является стандартным способом для этого и избегать случайных утечки памяти при использовании ARC?Возврат объекта NSMutableArray из метода с возвращаемым значением NSArray
Например, предположим, что мы имели некоторый класс со списком имен, и мы хотели, чтобы вручную фильтровать и захватить все имена, которые начали с данной буквы:
- (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;
Вернуть
copy
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, существует ли какая-либо реальная разница между этими четырьмя методами или она просто сводится к личным предпочтениям?
Кроме того, помимо возможных утечек памяти, есть ли какие-либо другие последствия при использовании одного метода над другим?
Обратите внимание, что если это дубликат, дайте мне знать, и я отвечу на вопрос. Я попытался выполнить поиск, но с трудом пытался свести проблему до нескольких поисковых запросов.
Не вдаваясь в подробности, ни одна из них не приведет к утечке памяти при включенной ARC. Я должен упомянуть, что 4 и 3 эквивалентны в среде ARC. – Jack