我有一个从NSObject继承的新对象
Car *myCar = [[Car alloc] init];这将返回16,即Car对象的大小
printf("myCar object: %d\n", sizeof(*myCar));请帮我说清楚,谢谢
发布于 2011-11-10 15:35:22
在本例中,sizeof的工作方式类似于C。
正如bbum所说,你不应该在NSObject类型上使用sizeof (但是指向NSObject的指针是可以的)。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这里有一个小例子,它向你展示了为什么大小会增长。有关更多详细信息,请访问维基百科页面here。
https://stackoverflow.com/questions/8075350
复制相似问题