目标C中的朋友类

spa*_*ana 2 objective-c

我将cpp代码移植到Objective C中.

cpp我们可以添加一个类作为friend class另一个类,并使用其所有的公共函数和变量.

我知道这个Objective C does not support friend class概念.

如何在Objective C中将类作为另一个类的朋友

Die*_*Epp 6

如果你有两个紧密耦合的类,那么你可以使用一些简单的技巧来公开一个更简单的公共接口.例如,

Banana.h:

@interface Banana : NSObject
- (BOOL)isPeeled;
@end
Run Code Online (Sandbox Code Playgroud)

Monkey.h:

@interface Monkey : NSObject
- (void)eat:(Banana *)aBanana;
@end
Run Code Online (Sandbox Code Playgroud)

BananaPrivate.h:

@interface Banana (PrivateMethods)
- (void)peel;
@end
Run Code Online (Sandbox Code Playgroud)

然后您的Monkey.m文件可以导入BananaPrivate.h以获取私有函数.如果您正在编写框架,那么您不会BananaPrivate.h在框架标题中包含.

这与在C中完成封装的方式相同.在我看来,它比friend关键字中断的要少得多C++,但是解释原因超出了这个答案的范围.

如果将Banana实现为类集群,也可以通过这种方式公开私有成员变量,但这有点疯狂,我不推荐它.如果您需要在类之间进行更紧密的耦合,那么您可能希望在代码的这一部分使用C语言.