Учитывая это:
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) в приведенном выше коде не имеет ничего общего с размером выделенного экземпляра.