Об'єктив C, як і C, не має просторів імен. Це означає, що якщо хтось уже визначив функцію foo
чи клас Bar
, він повинен бути унікальним у всьому світі, і ви не можете його визначити. Це може призвести до великих головних болів, коли у вас є ваш код, а потім додайте іншу бібліотеку, і раптом щось порушиться в чужих місцях.
Для цього існує вказівка Apple, представлена в програмі «Завдання C: Конвенції» бібліотеки розробників iOS:
Деякі імена повинні бути унікальними у вашому додатку
Кожен раз, коли ви створюєте новий тип, символ чи ідентифікатор, слід спочатку врахувати область, у якій ім'я повинно бути унікальним. Іноді ця сфера може бути цілою програмою, включаючи її пов'язані рамки; іноді сфера дії обмежується лише класом, що додається, або навіть просто кодом.
Назви класів мають бути унікальними протягом усього додатка
Класи Objective-C повинні бути названі однозначно не тільки в коді, який ви пишете в проекті, але і в будь-яких рамках або пакетах, які ви можете включати. Як приклад, вам слід уникати використання загальних імен класів, таких як ViewController або TextParser, оскільки можливо, що рамки, які ви включаєте у свою програму, можуть не дотримуватися конвенцій та створювати класи з однаковими іменами.
Щоб зберегти унікальні імена класів, умовою є використання префіксів для всіх класів. Ви помітили, що назви класів Cocoa та Cocoa Touch, як правило, починаються з NS або UI. Двохбуквенні префікси, подібні цим, зарезервовані Apple для використання в рамках класів фреймворку. Коли ви дізнаєтесь більше про Cocoa та Cocoa Touch, ви зіткнетеся з низкою інших префіксів, які стосуються конкретних рамок:
...
Ваші власні класи повинні використовувати три буквені префікси. Вони можуть стосуватися комбінації назви вашої компанії та назви вашої програми або навіть певного компонента у вашій програмі. Наприклад, якщо ваша компанія називалася Whispering Oak, і ви розробляли гру під назвою Zebra Surprise, ви можете вибрати WZS або WOZ як свій префікс класу.
Отже, вони мають бібліотеки, які ви згадуєте про певне порушення цієї конвенції, але в основі проблеми відсутності простору імен в межах Цілі C.
Подальше читання
простору імен NSHipster
Який найкращий спосіб вирішити зіткнення в просторі імен Objective-C?
Як користуються просторами імен в коді iOS aim-c?
;-)