0

オブジェクトが初期化されたクラスの名前を確認して取得することはできますか?

[[ABOBject alloc] init];例: クラス A があります。インスタンス メソッドを使用してオブジェクト ABObject を作成しました。

インスタンス ABObject が作成されたクラス、つまりここでは「A」を見つけるにはどうすればよいですか?

4

1 に答える 1

2

オブジェクトはクラスのコンテキスト外で作成できるため、これが組み込みの言語機能であることは意味がありません。

これを行う必要がある場合、これを回避する 1 つの方法は、そのようなオブジェクトがインスタンス化された直後にobjc_setAssociatedObjects()関数を使用することです。objc/runtime.h何かのようなもの:

ABObject *object = [[ABObject alloc] init];
objc_setAssociatedObject(object, @"InstantiatingClassKey", [self class], OBJC_ASSOCIATION_ASSIGN);

次に、で取得できますobjc_getAssociatedObject(object, @"InstantiatingClassKey")

これは特に保守性が高くないため、設計を再評価したほうがよいと思います。これをカテゴリに抽出してNSObject重複したコードを削除しても、覚えておくべき追加の手順と、オブジェクト間の奇妙な関係があります。

また、Martin R. がコメントで指摘しているように、ショートカットを使用して、関数のキー引数として文字列リテラルを渡しています。実際には、静的またはグローバルのアドレスを使用する慣例に従いたいと思うでしょう。変数。

于 2013-03-17T14:06:54.290 に答える