Когда я только начал работать с Objective-C, мне очень не нравился тот факт, что в этом языке нет возможности объявить какой-либо метод класса приватным. Это действительно доставляет большое количество неудобств, т.к. пользователю класса приходится разбираться с большим количеством методов используемых для внутренних целей класса и совершенно ему не нужных.
Несмотря на то, что не существует никакого способа запретить вызов метода класса, спрятать описание лишних методов от пользователя все же есть. Для этого необходимо воспользоваться такой замечательной фичей как категории. Категории позволяют добавить новые методы к уже существующему классу.
Исходный код будет выглядеть приблизительно так. В заголовочном файле описываются методы интересные конечному пользователю:
{}
- (void)publicFunc;
А файле реализации добавляются новые “закрытые” методы. Хотя эти методы и не видны пользователю через заголовчный файл, они могут быть вызваны наравне с описанными в заголовке.
- (void) privateFunc;
@end
@implementation TestClass
- (void)publicFunc
{
NSLog(@"publicFunc");
[self privateFunc];
}
- (void)privateFunc
{
NSLog(@"privateFunc");
}
Хотя это и не совсем то, что private/protected в C++, но уж лучше так..
Использовать категории для получения “почти private” методов, это не избыточное ли решение? По-моему, вполне достаточно будет просто не объявлять такие методы в заголовочном файле, только реализовать их в .m файле.
Тоже вариант. Скорей всего эти два метода дадут несколько разный бинарный код, но в целом согласен.