web-dev-qa-db-ja.com

文字列( "MyExampleClass")をクラス名(MyExampleClass)に変換します

文字列をクラス名に変換したい。たとえば、文字列"MyExampleClass"などのクラス名を含む文字列が変更されたとします。ここで、クラスMyExampleClassのオブジェクトを作成します。文字列からクラス名を取得する必要があります。次のようなことをしたいです。 (コードをスケッチと同じように考えてください。)

NSString *classNameStr = "MyExampleClass";
id theClass = [UIClass classFromString:classNameStr];
theClass *myObject = [[theClass alloc] init];

これを行う正しい方法は何ですか?

29
EmptyStack

これがあなたが望むものです:

Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];

theClassをタイプ名として使用できないことに注意してください(つまり、theClass *myObject)。そのためにはidを使用する必要があります。

76
Alex

NSClassFromStringが必要です:

_NSString *classNameStr = @"MyExampleClass";
Class theClass = NSClassFromString(classNameStr);
id myObject = [[theClass alloc] init];
_

Objcランタイムインターフェースを使用することもできます(例:objc_getClass(const char* name)objc_lookUpClass(const char* name))。前者はクラスをロードしません。後者はそうするでしょう。そのオプションは、場合によっては良いことかもしれません。

23
justin
id a = [[NSClassFromString(@"MyExampleClass") alloc] init];

これを使用すると、必要なものが得られます。

6
Ishu

クラスを動的に構築しようとしている場合は、ファクトリメソッドのデザインパターンをよく調べることをお勧めします。そうしないと、誰が何をどのように構築するかがわかりません。

これを行うには、文字列を受け取り、入力文字列に応じてクラスを返すクラスをコーディングできます。

Erich Gammaによる本「DesignPatterns:Elements of Reusable Object-OrientedSoftware」をご覧ください。リチャードヘルム;ラルフジョンソン;ジョン・ブリシディーズ。

1
David