为什么从NSObject继承的对象的大小是16bytes

时间:2011-11-10 05:29:23

标签: iphone ios macos nsobject

我有一个从NSObject

继承的新对象
Car *myCar = [[Car alloc] init];

返回16,Car对象的大小

printf("myCar object: %d\n", sizeof(*myCar));

请帮助我说清楚,谢谢

3 个答案:

答案 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的存储对象的字节数。

你为什么不喜欢它?