Когда я начал с OSX/прошивкой я использовалразница между литералами и методами класса для NSMutableArray и NSMutableDictionary
NSMutableArray * a1 = [NSMutableArray arrayWithCapacity:123] ;
NSMutableDictionary * d1 = [NSMutableDictionary dictionaryWithCapacity:123] ;
Тогда я открыл «простую» версию
NSMutableArray * a2 = [NSMutableArray array] ;
NSMutableDictionary * d2 = [NSMutableDictionary dictionary] ;
Я теперь переехал в:
NSMutableArray * a3 = [@[] mutableCopy] ;
NSMutableDictionary * d3 = [@{} mutableCopy] ;
Функционально все они кажутся идентичными: после инициализации в любом случае они могут использоваться независимо от того, как они были созданы. Где отличия?
В частности, следует ли считать, что d3/a3 более похожи на d2/a2, чем d1/a1, в терминах предопределения памяти (или их отсутствия)?
Или это только вопрос стиля?
Третий строит неперемещаемый объект и копирует его, создавая какое-то потраченное впустую движение. Это потраченное впустую движение отсутствует в первых двух. Разница между первым и вторым заключается в том, указан ли начальный размер или дефолт. Я не вижу реального смысла в третьем - даже я не * * ленивый. –
Вы также можете просто вызвать new для создания экземпляра. – uchuugaka
@HotLicks, насколько вы уверены в фактической стоимости? По определению NSArray неизменен после создания, что означает, что каждый экземпляр @ [] должен быть isEqual.Это, в свою очередь, означает, что очень дешевая оптимизация компилятором/временем выполнения должна иметь точно один экземпляр @ [] независимо от того, как часто в коде появляются либо @ [] или [NSArray array], либо [NSArray new]. Как бы вы решили проверить, что я ошибаюсь? – verec