1

NSObject が提供する機能を活用するために、軽量の C++ クラスを Objective-C に移植する必要があります。C++ クラスには何千ものインスタンスがあり、NSObject 派生クラスでラップすることでオーバーヘッドを増やしたくありません。

NSObject の大きさは?

4

2 に答える 2

4

まず第一に、あなたは の子孫でなければなりません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]クラス cls のインスタンスのバイト単位のサイズ」を明示的に返します。

于 2012-11-13T00:28:05.910 に答える
2

アップルのドキュメントでは、ここで次のように述べています

すべての Objective-C クラスのルート クラスは、Foundation フレームワークの一部である NSObject です。Cocoa または Cocoa Touch アプリケーションのすべてのオブジェクトは、最終的に NSObject を継承します。このクラスは、他のクラスが Objective-C ランタイムと対話する主要なアクセス ポイントです。

とにかく、すべての Objective-C クラスは最終的に NSObject から派生するので、選択の余地はありません。私が間違っている場合は、私を修正してください。

編集: 私が今学んだことは、NSObject が1 つのルート クラスであり、すべての目的 c クラスに期待される基本的な動作を実装することです。したがって、基本的には、NSObjectのプロトコルを実装するobjective-cクラスを作成し(objective-cはインターフェイスを表すと思います)allocinit自分のような基本的なものを実装できます。このスレッドを必ずチェックしてください: NSObject から継承しない Objective-C でクラスをインスタンス化する方法

編集: Objective-c のルート クラスに関する 詳細な洞察、非常に興味深い!

于 2012-11-13T00:19:12.810 に答える