Скажите, что у вас есть метод, который возвращает NSDictionary. Для создания словаря вам может понадобиться создать NSMutableDictionary. Есть ли необходимость или преимущество в возвращении неизменной копии словаря, а не просто возвращении изменяемого словаря?Нужно ли или необходимо преобразовать измененные NSObjects в неизменяемые, прежде чем возвращаться из методов?
например.
- (NSDictionary *)doSomethingAndReturnADictionary {
NSMutableDictionary * dic = [NSMutableDictionary new];
// fill in dic
return dic;
}
или лучше сделать следующее:
- (NSDictionary *)doSomethingAndReturnADictionary {
NSMutableDictionary * dic = [NSMutableDictionary new];
// fill in dic
return [NSDictionary dictionaryWithDictionary:dic];
}
Я думаю, копируя словарь, особенно если это большой один, это пустая трата ресурсов. Я полагаю, что NSMutableDictionary
занимает больше памяти, но я сомневаюсь, что есть большая разница. Метод может вернуть NSMutableDictionary
, но если словарь не предназначен для изменения после его возвращения, зачем беспокоиться? Возвращаемый словарь - это NSMutableDictionary
, но компилятор будет показывать его как NSDictionary
.
Тот же вопрос относится к NSArray
, NSString
и т. Д. Мне не удалось найти аналогичный вопрос.
Любые лучшие практики/все, что нужно учитывать?
Есть некоторые конкретные исключения. Например, ['NSMutableCharacterSet' документы] (https://developer.apple.com/library/prerelease/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableCharacterSet_Class/index.html), что он менее эффективен в использовании, чем 'NSCharacterSet' и рекомендует делать неизменяемую копию, как только вы ее модифицируете. –