2011-05-06 5 views
1

Есть ли способ создать «частные объекты» при создании фреймворка? (что означает, что классы, которые не будут экспортироваться за пределы)XCode 4 Framework - Частные объекты

У меня возникла проблема с тем, что мои фреймворки используют библиотеку JSON, а когда проекты, использующие мою инфраструктуру, пытаются также включить библиотеку JSON, они получают ошибку «символ уже определен».

Спасибо!

  • Yoav.
+0

Если это одна и та же библиотека JSON, не могут ли проекты, содержащие вашу инфраструктуру, просто не связывать структуру JSON? –

ответ

1

С Objective-C это на самом деле невозможно. Существуют некоторые рекомендации по предотвращению столкновения, хотя, например, следует использовать префиксы для членов, которые должны быть «скрыты» для других людей, а переменные-члены часто имеют префикс с подчеркиванием (Apple оставляет за собой право использовать 2 символа подчеркивания). Какую структуру JSON вы используете? Возможно, рассмотрите SBJSON, если вы еще не используете его, он использует префикс (SB) для предотвращения столкновения.

Из документации Apple:

Приставки являются важной частью имен программных интерфейсов. Они различают функциональные области программного обеспечения. Обычно это программное обеспечение поставляется в каркасе или (как в случае с Foundation и Application Kit) в тесно связанных рамках. Префиксы защищают от коллизий между символами, определенными сторонними разработчиками и теми, которые определены Apple (а также между символами в собственных рамках Apple).

Префикс имеет предписанный формат. Она состоит из двух или трех прописных букв и не используйте подчеркивание или Вот некоторые примеры NS «суб префиксов.»: Фундаментные NS: Application Kit AB: Адресная книга IB: Interface Builder

Использование префиксов при именовании классы, протоколы, функции, константы и структуры typedef. Не используйте префиксы при методах именования; методы существуют в пространстве имен, созданных классом, который их определяет. Кроме того, не следует использовать префиксы для именования полой структуры

Если вы хотите придерживаться библиотек JSON вы используете, и «пространство имен» является причиной проблемы, рассмотреть возможность добавления префикса к вашему собственные классы.

+0

Спасибо за ваш ответ. Я использую SBJSON, но так же делают продукты, которые используют мою библиотеку, что вызывает столкновение :) Я изменю префикс в y framework. – user92301

+0

Другие продукты, которые вы используете, включают SBJSON как часть двоичного кода? Если нет (другие продукты включают SBJSON в виде кода), вы можете просто удалить либо свою версию, либо другую, включенную в другой продукт. –

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