我有一个从NSObject
Car *myCar = [[Car alloc] init];
返回16,Car
对象的大小
printf("myCar object: %d\n", sizeof(*myCar));
请帮助我说清楚,谢谢
答案 0 :(得分:4)
您不能使用sizeof()
来确定Objective-C对象的大小。您可以改为使用class_getInstanceSize()
。
然而,由于许多原因,类实例的大小完全没用。
你想做什么?
答案 1 :(得分:3)
sizeof
的作用类似于C。
正如bbum所说,你不应该在sizeof
类型上使用NSObject
(但指向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是维基百科页面。
答案 2 :(得分:2)
这是分配给类NSObject
的存储对象的字节数。
你为什么不喜欢它?