Динамически загружать классы в Objective-C? - PullRequest
7 голосов
/ 15 ноября 2010

Есть ли способ # импортировать класс из строки в Objective-C во время выполнения?Любые методы, которые будут давать аналогичный результат, также приветствуются.

Редактировать:

Я хочу получить доступ к классу, имя которого я определяю во время выполнения.Так что-то вроде этого:

NSString *className = getClassName();
Class myClass = loadClass(className);
myClass *myVar = [[myClass alloc] init];

Есть ли способ сделать это, не помещая статическую директиву #import для myClass вверху файла?

Ответы [ 3 ]

25 голосов
/ 15 ноября 2010

Вы можете использовать NSClassFromString метод.Итак:

// Creates an instance of an NSObject and stores it in anObject
id anObject = [[NSClassFromString(@"NSObject") alloc] init];

Еще несколько примеров кода в ответ на ваше редактирование:

NSString* myClassString = getClassName();
// if the class doesn't exist, myClass will be Nil and myVar will be nil
Class* myClass = NSClassFromString(myClassString);
id myVar = [[myClass alloc] init];
5 голосов
/ 15 ноября 2010

Директива #import не «импортирует» класс - она ​​вставляет текст из названного файла в текущий файл.Очевидно, что это бесполезно во время выполнения после компиляции исходного кода.

Вам нужно создать пакет с классами и динамически загрузить пакет .Чтобы иметь возможность общаться с классами из основной программы, вам, вероятно, понадобится некоторый общий протокол, реализуемый связанными классами.

0 голосов
/ 17 ноября 2010

Спасибо Чаку за то, что он указал мне правильный путь, но правильный ответ на этот запрос, по-видимому, заключается в том, что это невозможно в iOS 4.1, хотя это возможно с текущим Mac OSX SDK, использующим загружаемые пакеты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...