1

我有一个轻量级的 c++ 类需要移植到 Objective-C 以利用 NSObject 提供的设施。将有数千个 C++ 类的实例,我不想通过将其包装在 NSObject 派生类中来增加太多开销。

NSObject 有多大?

4

2 回答 2

4

首先,你应该从NSObject. 不这样做没有明显的好处。NSObject在类的最低级别表示上没有添加任何存储,但添加了很多行为,这些行为将允许您的类在运行循环、普通集合(例如,NSArrayNSDictionary)以及几乎所有其他内容中正确运行。

具体回答你的问题:

#import <objc/runtime.h>

...

NSLog(@"obj size: %zd", class_getInstanceSize([NSObject class]));

在 iOS 上输出“4”,在 64 位 OS X 上输出“8”。所以您要寻找的答案是“整数的自然大小”。NSProxy大小相同,UIView(在 iOS 上)为 84 字节。

文档在class_getInstanceSize这里——它显式地返回“[t]he size in bytes of the class cls”,顾名思义。

于 2012-11-13T00:28:05.910 回答
2

在苹果文档中它在这里

所有 Objective-C 类的根类是 NSObject,它是 Foundation 框架的一部分。Cocoa 或 Cocoa Touch 应用程序中的所有对象最终都继承自 NSObject。此类是其他类与 Objective-C 运行时交互的主要访问点

所以我想说每个objective-c类最终都派生自NSObject,所以你别无选择。如果我错了,请纠正我。

编辑: 我现在学到的是 NSObject 是一个根类,它实现了每个objective-c类所期望的基本行为。所以基本上你可以编写一个实现NSObject协议的objective-c类(我认为这是objective-c代表接口)并实现像你自己这样的基本alloc东西init。请务必查看此线程:如何在 Objective-C 中实例化一个不继承自 NSObject 的类

编辑:对 Objective-c 中的根类 有更深入的了解,非常有趣!

于 2012-11-13T00:19:12.810 回答