/ / Statyczny inicjator w celu-C po załadowaniu klasy - cel-c, konstruktor statyczny

Statyczny inicjator w Objective-C podczas ładowania klasy - target-c, static-constructor

Próbuję zbudować coś, aby dynamicznie utworzyć instancję obiektu z nazwy klasy, podobnie jak działa metoda Class.forName w Javie, np.

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

Nie widziałem takiego zachowania w Objective-C, więcChciałbym wywołać metodę, aby zarejestrować Class, gdy klasa Objective-C jest ładowana. Zasadniczo chciałbym wywołać metodę, która rejestruje moją klasę, np.

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

Czy jest na to sposób w Objective-C na platformie OS X?

Dzięki.

Odpowiedzi:

4 dla odpowiedzi № 1

Chcesz użyć NSClassFromString, na przykład:

Class klass = NSClassFromString(@"MyClass");
id obj = [[klass alloc] init];

3 dla odpowiedzi № 2

Po pierwsze, rzeczywiście istnieje taki odpowiednik w Objective-C - jak zasugerował @Louis, użyj NSClassFromString ().

Po drugie, jeśli potrzebujesz konstruktora statycznego, takiego jak w Javie, możesz to również zrobić za pomocą metody + initialize. Widzieć to powiązane pytanie SO.


0 dla odpowiedzi № 3

Możesz też powiedzieć

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

Często pomaga to w przypadkach, gdy środowisko wykonawcze mogło jeszcze nie natknąć się na twoją klasę.