private-c private или public методы и объявление в заголовке или нет? - PullRequest
9 голосов
/ 14 марта 2011

Каков наилучший практический подход к частным методам в target-c.Это метод, который будет использоваться только в качестве вспомогательного метода.

В частности, мне неясно, в частности:

  1. Нужно ли указывать методв заголовочном файле как приватный вообще?то есть почему бы просто не оставить его в файле заголовка и
  2. Если вы можете оставить его вне файла заголовка, то какой смысл иметь закрытые методы?
  3. Или в target-c нет такой вещи, как настоящие приватные методы, в этом случае лучше просто указать все в заголовочном файле и вообще не беспокоиться о выделении приватного?

спасибо

Ответы [ 3 ]

7 голосов
/ 14 марта 2011

Нет необходимости указывать метод в публичном заголовочном файле. Вы можете захотеть использовать «приватный» заголовочный файл для использования другими классами в вашем модуле, если классы в вашем модуле должны быть «друзьями». Вы можете даже иметь «защищенный» заголовочный файл, как, например, у Apple с UIGestureRecognizerSubclass.h. Это все просто соглашение, но ничего не поддерживается самим языком.

Частный метод в Objective-C - это всего лишь тот, который публично не документирован; любой метод по-прежнему может быть вызван из любого места, если вызывающая сторона знает его имя для создания соответствующего селектора. Преимущество непубличного документирования метода заключается в том, что вы можете свободно изменять или удалять его, не беспокоясь о обратной совместимости. Исключение их из заголовочного файла является одним из способов не публично их документировать.

6 голосов
/ 14 марта 2011

То, что вы, вероятно, хотите использовать, называется «Расширения классов». Они похожи, но не следует путать с категориями. Это позволит вам объявить закрытые методы в вашем файле .m, и вы получите все приятные исправления и предложения IDE.

Вот достойная статья об этом
И связанный с этим вопрос

2 голосов
/ 16 мая 2011

Рекомендуется (и даже проверять компилятор), чтобы ВСЕ методы были объявлены так или иначе. Чтобы «спрятать» вспомогательные методы от посторонних глаз, объявите их таковыми в файле .m реализации, например:

#import Client;

@interface myClass (Private)
- (void) privateMethod;
- (float) bankAccountBalanceForClient:(Client *)client;
@end

@implementation myClass
- (void) privateMethod;
{
    //foo here
}

и так далее. Закрытые методы - это категория, называемая Private методов myClass. Эта категория может быть объявлена ​​где угодно, даже в главном файле .h, называемом приватными методами, хотя это будет кошмар обслуживания.

Таким образом, используя публичный файл .h для открытых методов и файл .m для объявления частных методов, у вас все ваши методы объявлены где-то. Я использую эту опцию компилятора, чтобы обеспечить и принудительно применить ее, чтобы любой используемый метод был фактически объявлен где-то (или я получаю синтаксическую ошибку), и, таким образом, я не получаю никаких сбоев во время выполнения из-за не найденного метода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...