Создание NSMutableArray с литералом через mutableCopy или arrayWithArray:
Возможный дубликат:
Является ли литеральное создание NSMutableDictionary менее эффективным, чем метод хелпера класса?
Согласно видео WWDC, в котором представлены литералы ObjectiveC, NSMutableArray
может быть инициализирован следующим образом:
[NSMutableArray arrayWithArray:@[]];
но что, если бы мы сделали это вот так:
[@[] mutableCopy];
Я знаю, что один инициализирует массив, а другой просто предоставляет мелкую копию; поэтому управление памятью отличается. Но если мы используем ARC, каковы недостатки использования последнего? Это дороже? ARC, вероятно, обрабатывает оба по-разному, но мне просто интересно, использует ли mutableCopy
"хуже" или нет.
Ответы
Ответ 1
В первом случае вы получаете два объекта, добавленных в текущий пул автозавершения: литерал NSArray и NSMutableArray, которые вы создаете из него. В последнем, буквальный NSArray добавляется в пул авторесурсов, но NSMutableArray, скопированный с него, не делает этого. Таким образом, первый случай немного худший, по производительности, в том, что слив пула авторезистов (например, в конце цикла цикла цикла) требует немедленного освобождения обоих объектов, тогда как во втором случае копия будет выпущена отдельно от автореализованный литерал. На практике разница во времени будет бесконечно малой.