首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么从NSObject继承的对象的大小是16字节

为什么从NSObject继承的对象的大小是16字节
EN

Stack Overflow用户
提问于 2011-11-10 13:29:23
回答 3查看 1.2K关注 0票数 1

我有一个从NSObject继承的新对象

代码语言:javascript
运行
复制
Car *myCar = [[Car alloc] init];

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

代码语言:javascript
运行
复制
printf("myCar object: %d\n", sizeof(*myCar));

请帮我说清楚,谢谢

EN

Stack Overflow用户

回答已采纳

发布于 2011-11-10 15:35:22

在本例中,sizeof的工作方式类似于C。

正如bbum所说,你不应该在NSObject类型上使用sizeof (但是指向NSObject的指针是可以的)。Clang禁止请求sizeof和对象。如果您需要对象的大小,那么objc运行时应该是您的参考,因为objc对象的实际大小不是静态(编译时)值,它是在运行时确定的。

给定这些类型:

代码语言:javascript
运行
复制
@interface A : NSObject
@end

@interface B : A
{
    uint64_t ivar;
}
@end

以及这些消息:

代码语言:javascript
运行
复制
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位上,我们得到:

代码语言:javascript
运行
复制
Class size is 8
NSObject size is 8
A size is 8
B size is 16

在32位上,我们得到:

代码语言:javascript
运行
复制
Class size is 4
NSObject size is 4
A size is 4
B size is 12

这里有一个小例子,它向你展示了为什么大小会增长。有关更多详细信息,请访问维基百科页面here

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8075350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档