распределение памяти в объекте c - PullRequest
0 голосов
/ 22 августа 2011

Я новичок в Objective C. У меня небольшое сомнение в распределении памяти.

Если мы объявим и выделим память для NSArray следующим образом:

NSArray * arr = [[NSArray alloc]init];

сколько памятивыделяться для массива arr?

1 Ответ

3 голосов
/ 22 августа 2011

Хм.Если вы действительно имели в виду NSArray, то массив будет пустым, в нем не будет храниться никаких элементов, следовательно, требуется лишь небольшой объем памяти, который в любом случае потребуется для любого объекта Objective C.(Точный объем памяти является деталью реализации).Но пустой NSArray, который не может быть изменен, не очень полезен, так что, я думаю, вы имели в виду NSMutableArray.Для NSMutableArray массив будет изначально пустым, но он может по-прежнему выделять некоторую дополнительную память (и весьма вероятно, что так и будет), потому что Objective C ожидает, что массив будет расти, и легче добавлять новыеэлементы в массив, если уже есть какая-то память, выделенная поверх того, что строго необходимо.Точный объем выделенной дополнительной памяти также является деталью реализации.

Если вы хотите, чтобы ваш массив занимал как можно меньше памяти, вы можете использовать [[NSMutableArray alloc] initWithCapacity:x], где x - максимальное числоэлементы, которые вы намереваетесь поместить в массив.Он по-прежнему будет иметь нулевой размер, но Objective C будет предполагать, что вы рано или поздно добавите к нему x элементов, поэтому он выделяет резервное хранилище, достаточное для x объектов.

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