CFBundle и NSBundle

Это понятие описывает отношение между NSBundle, классом Какао для управления загружаемыми пакетами и Базовой Основой CFBundle непрозрачный тип, на это построили. Этот материал является важным фоном для любого планирующего использовать загружаемые пакеты в их приложении.

О базовой основе CFBundle

Базовая Основа CFBundle непрозрачный тип обеспечивает основной API OS X для управления пакетами. Интерфейс программирования CFBundle изолирует разработчиков от контакта непосредственно со специфическими особенностями вещей как формат исполняемых файлов, определяющие местоположение ресурса алгоритмы и экстракция данных от информационного списка свойств.

Непрозрачный тип данных CFBundle делает ресурсы пакета и код доступными для Вашего приложения. Вы инициализируете объект CFBundle с расположением пакета и затем получаете доступ к содержанию пакета с различными подпрограммами CFBundle. Подпрограммы включают поддержку

Динамические подпрограммы загрузки обрабатывают все подробности взаимодействия с динамическими загрузчиками для поддерживаемых форматов исполняемых файлов, таким образом, Вы не должны заботиться о них. Код загрузки и разгрузки является вопросом инициализации объекта CFBundle для желаемого пакета и использования функций CFBundleLoadExecutable и CFBundleUnloadExecutable.

В приложениях Какао Вы не должны использовать подпрограммы CFBundle, чтобы загрузить и разгрузить исполняемый код, потому что CFBundle исходно не поддерживает время выполнения Objective C. NSBundle правильно загружает символы Objective C в систему во время выполнения, но нет никакого способа разгрузить пакеты Какао, один раз загруженные вследствие ограничения во время выполнения. Можно, однако, создать объект CFBundle для пакета Какао и использовать другие подпрограммы CFBundle без проблемы.

Для получения дальнейшей информации о Базовых Пакетах Основы, включая ссылку API, посмотрите, что Базовая Основа Программирует Руководство по программированию Пакета Темы.

О NSBundle

NSBundle является классом Какао, ответственным за управление пакетом. Большинство его методов вызывает соответствующие подпрограммы CFBundle и моделируется после них. Отметьте, однако, что указатели на объекты NSBundle не могут быть брошены в CFBundleRefs, в отличие от некоторых других Базовых типов Основы и эквивалентов Основы — они не бесплатные соединенный мостом.

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

По крайней мере пакеты Какао содержат единый класс, основной класс, служащий точкой входа в пакет. Посмотрите Загружаемые Пакеты в Какао для обсуждения основного класса.

Из-за ограничения в системе времени выполнения Objective C NSBundle не может разгрузить исполняемый код. Так как CFBundle не знает о символах Objective C, не используйте подпрограммы загрузки и разгрузки CFBundle на объектах NSBundle. Можно, однако, создать объект CFBundle для пакета Какао и использовать другие подпрограммы — не связанный с загрузкой и разгрузкой — без проблемы.