如果一类继承nsobject,则放置多少开销

how much overhead is put if a class inherit NSObject

本文关键字:开销 多少 nsobject 继承 一类 如果      更新时间:2023-10-16

我有一个轻巧的C 类,需要移植到Objective-C上,以利用NsObject提供的设施。C 类将有成千上万的实例,我不想通过将其包装在Nsobject派生的类中来添加太多开销。

nsobject有多大?

首先,您应该从NSObject下降。不这样做没有明显的好处。NSObject在类的最低级别表示方面没有添加任何添加的存储空间,但添加了很多行为,可以使您的课程与Runloop正确地行动,并具有正常的集合(例如,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的文档在这里 - 它明确返回" cls cls实例中的大小",如名称。

在Apple文档中说

所有Objective-C类的根类都是NSOBJECT,这是一部分 基础框架。可可或可可触摸中的所有物体 应用程序最终从nsobject继承。这个课是 主要的访问点,其他类与 Objective-C运行时间

所以我会说每个Objective-C类最终都来自NSObject,因此您别无选择。请纠正我,如果我错了。

编辑:我现在了解到的是,nSobject是一个根类,它实现了每个Objective-C类所期望的基本行为。因此,基本上,您可以编写一个Objective-C类,该类实现NsObject的协议(我认为这是Objective-C表示界面),并您自己实现了allocinit的基本内容。请务必查看此线程:如何在Objective-C中实例化不继承NSOBJECT

的类别

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