Частные и защищенные методы в Objective-C

Каков рекомендуемый способ определения частных и защищенных методов в Objective-C? Один веб-сайт предлагал использовать категории в файле реализации для частных методов, другой предлагал заключительные подчеркивания или XX_, где XX - это определенный для проекта код. Что использует сама Apple?

А как насчет защищенных методов? Одно из решений, которое я прочитал, состояло в том, чтобы использовать категории в отдельных файлах, например, CLASS_protected.h и CLASS_protected.m, но похоже, что это может стать очень раздутым. Что я должен делать?

2 ответа

Решение

Есть три вопроса:

  1. Прячется от компилятора.

    То есть, чтобы кто-то еще не смог что-то импортировать и посмотреть объявления ваших методов. Для этого поместите свой частный API в отдельный файл заголовка, пометьте роль этого заголовка как "Частная" в XCode, а затем импортируйте его в свой проект, где вам нужен доступ к указанному частному API.

    Используйте расширение категории или класса для объявления дополнительных методов.

  2. Предотвращение столкновений

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

    Опубликуйте ссылку на сайт, предлагая ведущие подчеркивания, так как они неправильные, неправильные, неправильные. Ведущие подчеркивания используются системой для обозначения частного API, и вы можете столкнуться с коллизиями достаточно легко.

  3. Прячется от времени выполнения.

    Не беспокойся Это только усложняет анализ отладки / сбоев, и любой, кто достаточно разбирается во время выполнения, сможет взломать ваше приложение в любом случае.

В Objective C нет "настоящих" закрытых методов, так как среда выполнения позволит через документированные публичные API получить доступ к любому методу в любом классе, используя их строковые имена.

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

XX_ представляется специальным средством для создания псевдо-пространства имен. Идея состоит в том, чтобы прочитать документы Apple и документы любых платформ, которые вы могли бы использовать в любое время в будущем, и выбрать префикс XX, который ни один из этих других, вероятно, никогда не будет использовать.

Другие вопросы по тегам