Два интерфейса в файлах *.h и *.m

Извините за мой английский, давайте говорить от души :) В одном проекте, над которым я работаю, я заметил интересный момент.

В файле *.h заявлен интерфейс:

@interface FrontViewController : UIViewController
...
@end

А в *.m файле нашел другой интерфейс.

@interface FrontViewController()

// Private Properties:
@property (retain, nonatomic) UIPanGestureRecognizer *navigationBarPanGestureRecognizer;

// Private Methods:
- (IBAction)pushExample:(id)sender;

@end

@implementation FrontViewController
...
@end

Зачем это нужно? И в чем смысл? -Я думаю, что это для удобства. Да?


person Ilya Ilin    schedule 06.03.2012    source источник
comment
Потому что я программировал на ObjectiveC++, а C++ также имеет заголовочные файлы и файлы реализации.   -  person Ilya Ilin    schedule 07.03.2012
comment
На это отвечали много раз. Вот один: Разница между определением @interface в .h и .m файл   -  person jscs    schedule 07.03.2012
comment
Извините, я не нахожу вопрос перед публикацией.   -  person Ilya Ilin    schedule 07.03.2012


Ответы (2)


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

Прочитайте об этом здесь.

person edc1591    schedule 06.03.2012
comment
Хм, разве я не могу указать приватные методы в файле .h? Или, если я укажу в .m файле приватные методы, я получу дополнительный плюс в проверке компиляции на реализацию приватных методов, указанных в .m файле? - person Ilya Ilin; 07.03.2012
comment
Заголовок — это общедоступное определение класса. - person N_A; 07.03.2012

Это расширение класса. Это позволяет вам объявлять «частные» методы и свойства для класса, даже если у вас нет доступа к источнику. Основное использование состоит в том, чтобы не выставлять эти методы как часть интерфейса. В отличие от большинства языков, эти методы обнаруживаются во время выполнения, поэтому их ценность заключается в автозаполнении IDE, а не в предотвращении вызова скрытых методов потребителями вашего класса, поэтому я заключаю private в кавычки. Можно просто определить методы в реализации без объявления, но тогда они должны быть реализованы над любыми местами, где они используются. Объявление их как расширения предотвращает эту проблему.

Если расширение имеет имя, оно становится категорией, которую можно использовать для распределения реализации вашего класса по нескольким файлам.

person N_A    schedule 06.03.2012