Соглашение об именах для проектов с открытым исходным кодом iOS / OSX


12

Не всегда, но в большинстве случаев вы найдете проекты с открытым исходным кодом для iOS или Mac OS X, имена которых начинаются с начальных букв имени и фамилии автора. Если бы автором проекта был Ник Лебланк, проект читался бы как NLMyProject.

Примеры:

Откуда это? Один человек написал так сначала, а потом все остальные?

Я ничего не мог найти об этом, даже в Руководстве Apple . Эта идиома написана где-нибудь?


1
Хороший вопрос и классные примеры с открытым исходным кодом! ;-)
Лев Натан,

Ответы:


16

Цель C, как и C, не имеет пространств имен. Это означает, что если кто-то уже определил функцию fooили класс Bar, он должен быть глобально уникальным, и вы не можете определить его. Это может привести к большому количеству головной боли, когда у вас есть код, а затем добавлена ​​еще одна библиотека, и вдруг что-то ломается в странных местах.

Там является ориентиром , представленный Apple , для этого в Программирование с Objective C: Конвенции раздел библиотеки для разработчиков IOS:

Некоторые имена должны быть уникальными в вашем приложении

Каждый раз, когда вы создаете новый тип, символ или идентификатор, вы должны сначала рассмотреть область, в которой имя должно быть уникальным. Иногда этой областью может быть все приложение, включая связанные с ним структуры; иногда область действия ограничена только классом включения или даже блоком кода.

Имена классов должны быть уникальными во всем приложении

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

Чтобы сохранить имена классов уникальными, принято использовать префиксы для всех классов. Вы заметили, что имена классов Cocoa и Cocoa Touch обычно начинаются с NS или UI. Подобные двухбуквенные префиксы зарезервированы Apple для использования в классах фреймворка. Когда вы узнаете больше о Cocoa и Cocoa Touch, вы столкнетесь с множеством других префиксов, которые относятся к конкретным средам:

...

Ваши собственные классы должны использовать трехбуквенные префиксы. Они могут относиться к комбинации названия вашей компании и вашего приложения или даже к определенному компоненту в вашем приложении. Например, если ваша компания называлась Whispering Oak и вы разрабатывали игру под названием Zebra Surprise, вы можете выбрать WZS или WOZ в качестве префикса своего класса.

Таким образом, библиотеки, о которых вы упоминаете, нарушают это соглашение, но в центре проблемы отсутствия пространства имен в Objective C.

Дальнейшее чтение
пространства имен NSHipster
Каков наилучший способ решить коллизию пространства имен Objective-C?
Как можно использовать пространства имен в коде Objective-C iOS?


Похоже, что Objective-C действительно нужны пространства имен ...
Крис Сирефице

1
@ChrisCirefice это было бы действительно хорошо, но нужно понимать, что Objective C - это тонкий слой поверх C. Попытка представить пространства имен там, вероятно, сложнее, чем кажется, не ломая вещи. Копаем в Почему у Objective-C нет пространств имен? Я нашел Разработчиков Clang - Добавление пространств имен в Objective-C . Помните, @используется потому, что он не используется в C ... Попытка добавить другой оператор, который не нарушает другие вещи, является сложной задачей.

1
Пространства имен @ChrisCirefice ничего не решают. Конфликты префиксов просто становятся конфликтами пространства имен.
Майлз Рут

@MichaelT Цель C некоторое время не была тонким слоем поверх C (Цель C 2.0). Теперь Apple сместила акцент на Swift, который включает в себя более современные функции, такие как пространства имен, но в настоящее время отсутствуют другие функции Objective C.
Лев Натан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.