Размер NSArray - PullRequest
       21

Размер NSArray

8 голосов
/ 21 февраля 2011

Когда я попытался проверить размер NSArray, который объявлен без какой-либо емкости, я нашел его 4. Теперь вопрос, почему это всегда 4? пожалуйста, помогите мне найти его .... Спасибо

Ответы [ 2 ]

13 голосов
/ 21 февраля 2011

Если вы говорите о sizeof, то не - это правильный способ узнать, сколько данных содержит NSArray.Доступ к объектам Objective-C всегда осуществляется через указатели, а размер указателя на iPhone составляет 4 байта.Вот что sizeof говорит вам.Чтобы узнать, сколько объектов в массиве, спросите у массива его count.

6 голосов
/ 21 февраля 2011

Учитывая это:

NSArray *foo;
NSLog(@"%d", sizeof(foo));

Вы получите 4 или 8, в зависимости от того, используете ли вы 32- или 64-битную систему. Обратите внимание, что я совершенно целенаправленно не инициализировал foo; в этом нет необходимости, поскольку sizeof(foo) дает размер байта foo, а foo - это просто случайный указатель на объект. Не имеет значения, если бы это было id foo; void*foo; NSString*foo;, все было бы 4 или 8.

Если вам нужен выделенный размер экземпляра определенного класса, среда выполнения Objective C предоставляет API самоанализа, который может сделать именно это. Однако я не могу придумать причину, по которой это было бы более чем интересно в программе.

Обратите внимание, что размер выделения экземпляра не учитывает какие-либо перераспределения. То есть NSArray, скорее всего, имеет резервное хранилище, которое является отдельным выделением.

Для повторения:

sizeof (foo) в приведенном выше коде не имеет ничего общего с размером выделенного экземпляра.

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