我有一个轻量级的 c++ 类需要移植到 Objective-C 以利用 NSObject 提供的设施。将有数千个 C++ 类的实例,我不想通过将其包装在 NSObject 派生类中来增加太多开销。
NSObject 有多大?
我有一个轻量级的 c++ 类需要移植到 Objective-C 以利用 NSObject 提供的设施。将有数千个 C++ 类的实例,我不想通过将其包装在 NSObject 派生类中来增加太多开销。
NSObject 有多大?
首先,你应该从NSObject
. 不这样做没有明显的好处。NSObject
在类的最低级别表示上没有添加任何存储,但添加了很多行为,这些行为将允许您的类在运行循环、普通集合(例如,NSArray
或NSDictionary
)以及几乎所有其他内容中正确运行。
具体回答你的问题:
#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”,顾名思义。
在苹果文档中它在这里说
所有 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 中的根类 有更深入的了解,非常有趣!