Недостаток использования NSMutableArray по сравнению с NSArray?

ОСНОВНОЙ: старая школа

10 HOME
20 INPUT N
30 LET ANS = 1
40 FOR I = 1 TO N
50   ANS = ANS * I
60 NEXT I
70 PRINT ANS
33
задан igul222 17 November 2009 в 02:39
поделиться

4 ответа

Если вы загружаете объекты из базы данных и знаете точно , сколько у вас объектов, вы, вероятно, получите лучшую производительность от NSMutableArray s arrayWithCapacity: и добавляя к нему объекты до полного заполнения, поэтому он выделяет всю память сразу, если это возможно.

За кулисами они тайно одно и то же - NSArray и NSMutableArray реализуются с CFArray s через бесплатный мост (a CFMutableArrayRef и CFArrayRef являются typedef одного и того же вещь, __ CFArray * ) *

NSArray и NSMutableArray должны иметь одинаковую производительность / сложность (время доступа в худшем случае O (lg N) и O (1) ) в лучшем случае), и единственная разница заключается в том, сколько памяти будут использовать два объекта - NSArray имеет фиксированный предел, в то время как NSMutableArray может использовать столько места, сколько у вас свободного.

Комментарии в CFArray.h содержат более подробную информацию об этом.

*: Как указывает Catfish_Man ниже, это больше не соответствует действительности.

Это больше не правда.

Это больше не правда.

50
ответ дан 27 November 2019 в 17:35
поделиться

Кроме того, NSMutableArray не является потокобезопасным, а NSArray (то же самое со всеми изменяемыми и «неизменяемыми» объектами). Это может стать серьезной проблемой, если вы используете многопоточность.

14
ответ дан 27 November 2019 в 17:35
поделиться

Вы не можете изменить NSArray после его создания. Если вам нужно добавить / удалить объекты из вашего массива, вы будете использовать NSMutableArray - вариантов для этого не так много. Я предполагаю, что NSArray оптимизирован для операций с фиксированными массивами. Изменяемый массив обеспечивает гибкость и возможность модификации.

2
ответ дан 27 November 2019 в 17:35
поделиться

Разница в производительности при использовании массива NSArray и массива NSMutable возникает в первую очередь, когда вы используете API, который хочет скопировать массив. если вы отправляете -copy в неизменяемый массив, он просто увеличивает счетчик сохранения, но отправка -copy в изменяемый массив будет выделять память кучи.

25
ответ дан 27 November 2019 в 17:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: