Если у вас есть два тесно связанных класса, вы можете использовать несколько простых приемов, чтобы представить более простой публичный интерфейс. Например,
В Banana.h
:
@interface Banana : NSObject
- (BOOL)isPeeled;
@end
В Monkey.h
:
@interface Monkey : NSObject
- (void)eat:(Banana *)aBanana;
@end
In BananaPrivate.h
:
@interface Banana (PrivateMethods)
- (void)peel;
@end
Тогда ваш Monkey.m
файл может импортировать BananaPrivate.h
, чтобы получить приватные функции. Если вы пишете фреймворк, то вы не включаете BananaPrivate.h
в заголовки фреймворка.
Это тот же способ, которым инкапсуляция выполняется в C. По моему мнению, он значительно менее нарушен, чем ключевое слово friend
в C++
, но объяснение почему выходит за рамки этого ответа.
Вы также можете выставить закрытые переменные-члены, если реализуете Banana как кластер классов, но это отчасти безумие, и я не рекомендую его. Если вам нужна еще более тесная связь между классами, вы можете использовать идиомы C для этой части кода.