我需要将一个轻量级的c ++类移植到Objective-C来利用NSObject提供的工具。将有数以千计的C ++类实例,我不想通过将它包装在NSObject派生类中来增加额外的开销。
NSObject有多大?
答案 0 :(得分:4)
首先,你应该从NSObject
下降。不这样做没有任何实际好处。 NSObject
在类的最低级别表示形式的存储方面没有添加任何内容,但添加了大量的行为,允许您的类使用正常集合(例如NSArray
与runloop一起正确操作或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
的文档是here - 它明确地返回“[t]类cls实例的字节大小”,如名称所示。
答案 1 :(得分:2)
在苹果文档中说here
所有Objective-C类的根类都是NSObject,它是其中的一部分 基金会框架。 Cocoa或Cocoa Touch中的所有对象 应用程序最终继承自NSObject。这个班是 主要访问点,其他类与之交互 Objective-C运行时
所以我要说每个Objective-c类最终都来自NSObject,所以你别无选择。如果我错了,请纠正我。
修改强>
我现在学到的是NSObject是一个根类,它实现了每个objective-c类所期望的基本行为。所以基本上你可以编写一个Objective-c类来实现NSObject的协议(我认为这是客观的c代表接口)并自己实现alloc
和init
之类的基本内容。请务必查看此主题:How to instantiate a class in Objective-C that don't inherit from NSObject
修改强> 还有一些insight into root classes in objective-c,非常有趣!