Частные и защищенные методы в Objective-C
Каков рекомендуемый способ определения частных и защищенных методов в Objective-C? Один веб-сайт предлагал использовать категории в файле реализации для частных методов, другой предлагал заключительные подчеркивания или XX_, где XX - это определенный для проекта код. Что использует сама Apple?
А как насчет защищенных методов? Одно из решений, которое я прочитал, состояло в том, чтобы использовать категории в отдельных файлах, например, CLASS_protected.h и CLASS_protected.m, но похоже, что это может стать очень раздутым. Что я должен делать?
2 ответа
Есть три вопроса:
Прячется от компилятора.
То есть, чтобы кто-то еще не смог что-то импортировать и посмотреть объявления ваших методов. Для этого поместите свой частный API в отдельный файл заголовка, пометьте роль этого заголовка как "Частная" в XCode, а затем импортируйте его в свой проект, где вам нужен доступ к указанному частному API.
Используйте расширение категории или класса для объявления дополнительных методов.
Предотвращение столкновений
Если вы реализуете много внутренних циклов, делайте это с помощью общего префикса или чего-то, что делает коллизию с предоставленными Apple (или сторонними) предоставленными методами чрезвычайно маловероятной. Это особенно важно для категорий и не так критично для подклассов конечных узлов существующих классов.
Опубликуйте ссылку на сайт, предлагая ведущие подчеркивания, так как они неправильные, неправильные, неправильные. Ведущие подчеркивания используются системой для обозначения частного API, и вы можете столкнуться с коллизиями достаточно легко.
Прячется от времени выполнения.
Не беспокойся Это только усложняет анализ отладки / сбоев, и любой, кто достаточно разбирается во время выполнения, сможет взломать ваше приложение в любом случае.
В Objective C нет "настоящих" закрытых методов, так как среда выполнения позволит через документированные публичные API получить доступ к любому методу в любом классе, используя их строковые имена.
Я никогда не делаю отдельные файлы интерфейса для "приватных" методов и позволяю компилятору жаловаться, если я пытаюсь использовать любой из этих методов вне области видимости файла.
XX_ представляется специальным средством для создания псевдо-пространства имен. Идея состоит в том, чтобы прочитать документы Apple и документы любых платформ, которые вы могли бы использовать в любое время в будущем, и выбрать префикс XX, который ни один из этих других, вероятно, никогда не будет использовать.