2011-01-11 6 views
29

Ich möchte eine Zeichenfolge in einen Klassennamen konvertieren. Stellen Sie sich vor, dass ich eine Zeichenfolge habe, die sich ändert und einen Klassennamen enthält, beispielsweise die Zeichenfolge "MyExampleClass". Jetzt möchte ich ein Objekt der Klasse MyExampleClass erstellen. Ich muss den Klassennamen aus der Zeichenfolge abrufen. Ich möchte etwas wie das Folgende tun. (Betrachten Sie den Code nur als Skizze.)Konvertieren einer Zeichenfolge ("MyExampleClass") in einen Klassennamen (MyExampleClass)

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

Was ist der richtige Weg, dies zu tun?

+0

hast du noch das java tutorial über reflexion gelesen? – atk

+0

@atk: Hat das iOS keine andere Syntax? – EmptyStack

+0

Entschuldigung. Ich hatte gedacht, dass ich "Java" in den Tags sah. Ich lag falsch :) – atk

Antwort

76

Hier ist, was Sie wollen würde:

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

Beachten Sie, dass Sie nicht theClass als Typnamen verwenden (das heißt theClass *myObject). Sie müssen id dafür verwenden.

23

Sie wollen NSClassFromString:

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

Sie können auch die objc Runtime-Schnittstellen verwenden (z objc_getClass(const char* name), objc_lookUpClass(const char* name)). Ersteres lädt keine Klasse. Letzteres wird. Diese Option könnte in einigen Fällen eine gute Sache sein.

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

Verwenden Sie diese eine wird Ihnen das geben, was Sie wollen.

0

Wenn Sie versuchen, Ihre Klassen dynamisch zu erstellen, empfehle ich Ihnen, einen Blick auf das Designmuster der Factory-Methode zu werfen, da Sie sonst übersehen, wer was baut und wie.

Um dies zu tun, können Sie eine Klasse codieren, die eine Zeichenfolge empfängt und abhängig von der Eingabezeichenfolge eine Klasse zurückgibt.

Werfen Sie einen Blick auf das Buch "Design Patterns: Elemente der wiederverwendbaren objektorientierten Software" von Erich Gamma; Richard Helm; Ralph Johnson; John Vlissides.

Verwandte Themen