私の質問は、現在のバージョンの Foundation (または、Objective-C ランタイム ライブラリが存在するように見えるため) がNSObject
派生オブジェクトの保持カウントをどのように実装しているかということです。NSObject.mmでわかるようにretain count
、NSObject
のインターフェイス本体で呼び出される ivar はありません。代わりに、各オブジェクトの参照カウンターを含む一種のテーブルまたはマップがあるようです。しかし、保持カウントが実際にマップで行われる場合、この種の実装では操作が高価にretain
なりrelease
すぎません (この場合、ミューテックスをロックおよびロック解除する必要があるため、マップを検索して正しいオブジェクトを見つけます。マルチスレッド環境では、一度に 1 つのオブジェクトしか保持/解放できないこと)。
NSObject.mm (によって呼び出される関数のよう_objc_rootAllocWithZone
です)でもobjc-runtime-new.mm (それによって後で呼び出されます)。[NSObject alloc]
_class_createInstanceFromZone
_objc_rootAllocWithZone