2012-02-15 3 views
0

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

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

ответ

0

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

[[ClassName alloc] init] 

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

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

Class metaclass = NSClassFromString(@"ClassName"); 

Который возвращает либо с именем метакласса или nil, если этот класс не существует. Полагая, что вместе:

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

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

Смежные вопросы