30

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

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

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

4

4 に答える 4

76

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

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

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

于 2011-01-11T05:44:10.633 に答える
22

あなたが欲しいNSClassFromString

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

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

于 2011-01-11T05:43:29.327 に答える
6
id a = [[NSClassFromString(@"MyExampleClass") alloc] init];

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

于 2011-01-11T05:46:18.343 に答える
1

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

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

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

于 2011-10-30T01:47:09.377 に答える