2

Java の Class.forName メソッドの動作と同様に、クラス名からオブジェクトを動的にインスタンス化する何かを構築しようとしています。

Class klass = Class.forName("MyClass");
Object obj = klass.instantiate(...

Objective-C ではそのような動作は見られなかったので、Objective-C クラスがロードされたときに Class を登録するメソッドを呼び出したいと思います。基本的に、クラスを登録するメソッドを呼び出したいと思います。

+ (void)mystatic {
  [NSKeyedUnarchiver setClass:[self class] forClassName:"MyClass"]
}

OS X プラットフォームの Objective-C でこれを行う方法はありますか?

ありがとう。

4

3 に答える 3

4

次のように、NSClassFromString を使用します。

Class klass = NSClassFromString(@"MyClass");
id obj = [[klass alloc] init];
于 2009-07-04T23:49:01.250 に答える
3

まず、Objective-C には実際にそのような同等のものがあります — @Louis が提案したように、NSClassFromString() を使用してください。

次に、Java のような静的コンストラクターが必要な場合は、+initialize メソッドを使用してそれを行うこともできます。この関連する SO の質問を参照してください。

于 2009-07-05T14:36:41.093 に答える
0

あなたも言うことができます

Class myClass = [[NSBundle mainBundle] classNamed: @"MyClassName];
id myInstance = [[myClass alloc] init];

これは、ランタイムがまだクラスに到達していない可能性がある場合に役立ちます。

于 2009-09-29T18:07:02.230 に答える