Подтвердить что ты не робот

Создание NSMutableArray с литералом через mutableCopy или arrayWithArray:

Возможный дубликат:
Является ли литеральное создание NSMutableDictionary менее эффективным, чем метод хелпера класса?

Согласно видео WWDC, в котором представлены литералы ObjectiveC, NSMutableArray может быть инициализирован следующим образом:

[NSMutableArray arrayWithArray:@[]];

но что, если бы мы сделали это вот так:

[@[] mutableCopy];

Я знаю, что один инициализирует массив, а другой просто предоставляет мелкую копию; поэтому управление памятью отличается. Но если мы используем ARC, каковы недостатки использования последнего? Это дороже? ARC, вероятно, обрабатывает оба по-разному, но мне просто интересно, использует ли mutableCopy "хуже" или нет.

4b9b3361

Ответ 1

В первом случае вы получаете два объекта, добавленных в текущий пул автозавершения: литерал NSArray и NSMutableArray, которые вы создаете из него. В последнем, буквальный NSArray добавляется в пул авторесурсов, но NSMutableArray, скопированный с него, не делает этого. Таким образом, первый случай немного худший, по производительности, в том, что слив пула авторезистов (например, в конце цикла цикла цикла) требует немедленного освобождения обоих объектов, тогда как во втором случае копия будет выпущена отдельно от автореализованный литерал. На практике разница во времени будет бесконечно малой.