Частные и защищенные методы в Objective-C - PullRequest
4 голосов
/ 24 января 2011

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

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

Ответы [ 2 ]

11 голосов
/ 24 января 2011

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

  1. Скрывается от компилятора.

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

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

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

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

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

  3. Скрывается от времени выполнения.

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

1 голос
/ 24 января 2011

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

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

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

...