Шаблон фабричного метода в Задаче C: NSClassFromString () - PullRequest
2 голосов
/ 04 марта 2012

Я определил область в приложении, которое я разрабатываю, где шаблон фабричного метода кажется подходящим.Я достаточно знаком с этим шаблоном на других языках (C #, Java), но я читал книгу «Шаблоны проектирования Какао», и она содержит главу «Динамическое создание», в которой показано, как использовать метод NSClassFromString ().Об этой функции написано:

Эта единственная функция эффективно сводит во многих случаях известный шаблон фабричного метода к одной строке кода.

Мне интереснодолжен ли я использовать этот метод динамического создания вместо типового шаблона фабричного метода?Вызывает ли метод динамического создания нормальный метод каждый раз, или есть случаи, когда один из них более подходит, чем другой?

Сейчас я склоняюсь к использованию обычного шаблона фабричного метода, но мне было интересночто думают другие?

С уважением, Ник

1 Ответ

3 голосов
/ 04 марта 2012

Утверждение в книге немного сильное, я бы сказал.

Вы должны использовать NSClassFromString в двух обстоятельствах:

  • Вы читаетеимя класса в виде строки во время выполнения.Очевидно, что если вы получаете имя класса в виде строки, вам нужно каким-то образом преобразовать его в объект класса, и NSClassFromString - это один из способов сделать это.Вероятно, вам следует проверять строку (или возвращенный объект класса) в белом списке допустимых классов, если вы не доверяете источнику строки.

  • Вы слабо связываете фреймворк и используете SDK / платформу, которая не поддерживает функцию NS_CLASS_AVAILABLE.Обратитесь к Руководству по совместимости SDK для получения дополнительной информации об этом.

В любом другом случае, вероятно, лучше получить объект класса, используявыражение вроде [MyClass class].Таким образом, вы получите ошибку во время компиляции, если класс не существует (например, потому что вы неправильно написали имя класса).

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