Дружеский класс в Objective C - PullRequest
2 голосов
/ 15 мая 2011

Я портирую код cpp в Objective C.

В cpp мы можем добавить класс как friend class к другому классу и использовать все его открытые функции и переменные.

Я знаю эту концепцию Objective C does not support friend class.

Как мне сделать класс другом друга в Objective C

1 Ответ

6 голосов
/ 15 мая 2011

Если у вас есть два тесно связанных класса, вы можете использовать несколько простых приемов, чтобы представить более простой публичный интерфейс. Например,

В 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 для этой части кода.

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