Создает ли subarrayWithRange копию при выполнении в неизменяемом массиве (NSArray)? - PullRequest
2 голосов
/ 05 декабря 2009

Предположим, у меня есть неизменный NSArray и я хочу создать несколько подмассивов. Я мог бы вызвать subarrayWithRange для исходного массива и получить новый NSArray. Совместно ли новая копия разделяет область памяти со старой копией?

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

Ответы [ 2 ]

3 голосов
/ 05 декабря 2009

К сожалению, реализация Apple не является открытым исходным кодом, поэтому мы не можем сказать наверняка. Однако из простого тестирования кажется, что он создает новую копию подмассива.

Хотя вы правы в том, что это может привести к квадратной схеме использования памяти, в некоторых случаях она также эффективна. Представьте, что у вас очень большой массив и вам нужен только маленький подмассив. Большой массив не будет освобожден, если подмассив повторно использует внутренний массив.

0 голосов
/ 05 декабря 2009

Посмотрите на это в Instruments и посмотрите, сколько памяти выделяется при создании подмассива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...