如果一个类继承了NSObject,那么会增加多少开销

时间:2012-11-13 00:13:19

标签: c++ objective-c

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

NSObject有多大?

2 个答案:

答案 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代表接口)并自己实现allocinit之类的基本内容。请务必查看此主题:How to instantiate a class in Objective-C that don't inherit from NSObject

修改 还有一些insight into root classes in objective-c,非常有趣!