Ваш пример использует этот шаблон для создания экземпляра Java-класса. В старые времена (до MacOS 10.4, я думаю) у Apple была какая-то технология, называемая Cocoa-Java Bridge, которая позволяла использовать классы Java в коде Objective-C. Вы должны были создать их экземпляры указанным способом, потому что у них не было заголовочных файлов Objective-C для импорта.
Однако, что касается Snow Leopard, Java Bridge больше не существует, поэтому код в вашем вопросе больше не будет работать.
Рекомендуемое решение для вызова Java-класса из Objective-C теперь JNI . Посмотрите на этот вопрос , если вы пытаетесь это сделать.
- Что это? Почему и когда вы будете использовать этот шаблон дизайна?
Возвращаясь к NSClassFromString
, у него есть и другие применения, помимо создания экземпляров классов Java (что, как я уже говорил, больше не работает!). Например, недавно я написал библиотеку для анализа ответа от веб-службы. Чтобы заставить его работать с различными веб-сервисами, я прочитал его в файле конфигурации, в котором описывался ожидаемый формат данных. Для каждого поля в веб-сервисе мой конфигурационный файл указал, какой класс Cocoa нужно создать. Таким образом, в моем коде у меня было имя класса Какао в виде строки. Чтобы создать экземпляр объекта, который я хотел, я использовал NSClassFromString
, чтобы превратить его в объект Class
.
- Обычно, когда я хочу использовать определенный класс, я импортировал их в заголовок. При таком подходе пропускается процесс #import?
Это можно сделать. NSClassFromString
создаст экземпляр любого класса, который присутствует во время выполнения, поэтому вам не нужен заголовок, чтобы иметь возможность его использовать. Если у вас нет заголовка, вы получите кучу предупреждений «возможно, не отвечает селектору» всякий раз, когда вы пытаетесь использовать ваш недавно созданный экземпляр класса, поскольку у компилятора недостаточно информации, чтобы быть полезным. Однако во многих случаях, когда NSClassFromString полезен, файлы заголовков недоступны.