为什么从 NSObject 继承的对象的大小是 16bytes
我有一个继承自 NSObject
的新对象,
Car *myCar = [[Car alloc] init];
它返回 16,即 Car
对象的大小,
printf("myCar object: %d\n", sizeof(*myCar));
请帮我说清楚,谢谢
I have a new object inherited from NSObject
Car *myCar = [[Car alloc] init];
This returns 16, the size of a Car
object
printf("myCar object: %d\n", sizeof(*myCar));
plz help me to make it clear, thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您不能使用
sizeof()
来确定 Objective-C 对象的大小。您可以使用class_getInstanceSize()
来代替。但是,由于很多很多原因,类实例的大小完全没有用处。
你想做什么?
You can't use
sizeof()
to determine the size of an Objective-C object. You can useclass_getInstanceSize()
instead.However, the size of an instance of a class is quite thoroughly useless for many, many, reasons.
What are you trying to do?
sizeof
在这种情况下像 C 一样工作。正如 bbum 所说,你不应该在
NSObject
类型上使用sizeof
(而是指向NSObject< /code> 没问题)。 Clang 禁止请求
sizeof
和对象。如果您需要对象的大小,则 objc 运行时应该是您的参考,因为 objc 对象的实际大小不是静态(编译时)值,而是在运行时确定的。给定这些类型:
以及这些消息:
在 64 位上,我们得到:
在 32 位上,我们得到:
有一个小例子向您展示了大小增长的原因。有关更多详细信息,此处是维基百科页面。
sizeof
in this case works like C.As bbum said, you should not use
sizeof
onNSObject
types (but pointers toNSObject
s are ok). Clang forbids requesting thesizeof
and object. The objc runtime should be your reference if you need an object's size because the actual size of an objc object is not a static (compile-time) value, it is determined at runtime.Given these types:
And these messages:
On 64 bit, we get:
And on 32 bit, we get:
There's a little example which shows you why sizes grow. For more detail, here is the wikipedia page.
这是分配给存储
NSObject
类对象的字节数。你为什么不喜欢它?
This is the number of bytes that was allocated to store object of class
NSObject
.Why do not you like it?