sizeof
в этом случае работает как C.
Как сказал bbum, вы не должны использовать sizeof
на NSObject
типах (но указатели на NSObject
s в порядке).Clang запрещает запрашивать sizeof
и объект.Среда выполнения objc должна быть вашей справкой, если вам нужен размер объекта, поскольку фактический размер объекта objc не является статическим значением (во время компиляции), он определяется во время выполнения.
С учетом следующих типов:
@interface A : NSObject
@end
@interface B : A
{
uint64_t ivar;
}
@end
И эти сообщения:
printf("Class size is %lu\n", sizeof(Class)); // << for NSObject.isa
printf("NSObject size is %lu\n", sizeof(NSObject));
printf("A size is %lu\n", sizeof(A));
printf("B size is %lu\n", sizeof(B));
На 64-битных мы получаем:
Class size is 8
NSObject size is 8
A size is 8
B size is 16
А на 32-битных мы получаем:
Class size is 4
NSObject size is 4
A size is 4
B size is 12
Есть небольшой пример, который показывает вам, почему размеры растут.Для более подробной информации, здесь - страница википедии.