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 № 1Chcesz 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ę.