Предположим, что я хочу, например, начать создавать пары ключ/значение, используя NSMutableDictionary
. Кажется, у меня есть как минимум три варианта создания пустого, изменяемого словаря с неопределенной емкостью:
NSMutableDictionary *mutDict = [[NSMutableDictionary alloc] init]; // 1
NSMutableDictionary *mutDict = [NSMutableDictionary new]; // 2
NSMutableDictionary *mutDict = [NSMutableDictionary dictionary]; // 3
Теперь, насколько я понимаю, [NSObject new]
практически (если не точно?) совпадает с [[NSObject alloc] init]
. Поэтому мы можем в принципе объединить эти два варианта, насколько мне известно. Что касается метода [NSDictionary dictionary]
, но documentation говорит:
словарь
Создает и возвращает пустой словарь.
+ (id)dictionary
Возвращаемое значение
Новый пустой словарь.
Обсуждение
Этот метод объявляется в основном для использования с изменяемыми подклассами
NSDictionary
.Если вам не нужен временный объект, вы также можете создать пустую с помощью
alloc...
иinit
.
У меня есть несколько вопросов относительно этой документации, чтобы начать с:
Во-первых, почему он даже объявлен в NSDictionary вместо NSMutableDictionary, если он предназначен для использования?
Во-вторых, что они подразумевают под "временным объектом" в этом контексте?
Вкратце: есть ли разница между третьей альтернативой выше, по сравнению с первыми двумя? Может ли что-то делать с автореализацией объектов? Это даже имеет значение в контексте автоматического подсчета ссылок (ARC)?
Обратите внимание, что этот вопрос относится и к другим классам, например [NSData data]
и [NSArray array]
.
Я использую XCode 4.6.1 и iOS 6.1. Имеет ли значение то, что я использую в наши дни, используя ARC? Возможно, с некоторой точки зрения на производительность?
Спасибо за любую четкую информацию об этом!