Игнорирование ветвей кода, если библиотеки отсутствуют через xcode - PullRequest
0 голосов
/ 15 февраля 2012

В AdWhirl SDK - сборке из нескольких рекламных сетей - структура структурирована таким образом, что, если вы не импортируете дополнительную библиотеку, скажем, из Google AdSense или из AdMob, она просто проигнорирует эти ветви кода при компиляции и запуске кода. То есть в структуре есть код, который требует запуска AdSense SDK, но если вы не включите AdSense, он просто игнорирует этот код, никаких ошибок компилятора или чего-либо еще. Пользователь не должен комментировать код или что-то в этом роде.

Я пытаюсь построить фреймворк с похожим требованием, и я не могу до конца жизни понять, как они заставили это работать. По умолчанию, очевидно, вы будете получать ошибки компоновщика в коде во время компиляции из-за отсутствующих библиотек. Как мне экспортировать фреймворк (в настоящее время в виде файла .a), который имеет эту функцию?

1 Ответ

0 голосов
/ 15 февраля 2012

Когда вы делаете что-то вроде:

[[ClassName alloc] init]

На самом деле вы отправляете сообщение alloc в метакласс ClassName, а затем init в экземпляр ClassName, которыйметакласс пытается вернуться (или никому, если метакласс вернул nil из-за недостатка ресурсов).

Кроме того, среда выполнения Objective C является отражающей.Среди прочего, это означает, что вы можете запросить его, чтобы найти метаклассы из строкового имени классов.Например,

Class metaclass = NSClassFromString(@"ClassName");

, который возвращает либо названный метакласс, либо nil, если этот класс не существует.Сложив это вместе:

id instance = [[NSClassFromString(@"ClassName") alloc] init];

Даст вам экземпляр класса, если такой класс известен приложению и доступны подходящие ресурсы.Поэтому в случае необязательных библиотек ссылок это способ попытаться получить экземпляр класса, но безопасно завершить его, если библиотека, содержащая этот класс, не была связана.

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