为什么从NSObjectinheritance的对象的大小是16bytes

我有一个从NSObjectinheritance的新对象

 Car *myCar = [[Car alloc] init]; 

这将返回16, Car对象的大小

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

请帮助我说清楚,谢谢

在这种情况下, sizeof像C一样工作。

正如bbum所说,你不应该在NSObject类型上使用sizeof (但指向NSObject的指针是可以的)。 Clang禁止请求sizeof和object。 如果您需要对象的大小,则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 

有一个小例子可以向您展示尺寸增长的原因。 有关更多详细信息,请参阅维基百科页面。

您不能使用sizeof()来确定Objective-C对象的大小。 您可以使用class_getInstanceSize()代替。

但是 ,由于许多原因,类实例的大小完全没用。

你想做什么?

这是分配给类NSObject存储对象的字节数。

为什么你不喜欢它?