objective-c - Objective C 中的友元类

标签 objective-c

我正在将 cpp 代码移植到 Objective C 中。

cpp中,我们可以将一个类作为友元类添加到另一个类中,并使用它的所有公共(public)函数和变量。

我知道Objective C不支持友元类概念。

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

最佳答案

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

Banana.h中:

@interface Banana : NSObject
- (BOOL)isPeeled;
@end

Monkey.h中:

@interface Monkey : NSObject
- (void)eat:(Banana *)aBanana;
@end

BananaPrivate.h中:

@interface Banana (PrivateMethods)
- (void)peel;
@end

然后您的Monkey.m文件可以导入BananaPrivate.h来获取私有(private)函数。如果您正在编写框架,则不要在框架 header 中包含 BananaPrivate.h

这与 C 中完成封装的方式相同。在我看来,它比 C++ 中的 friend 关键字的破坏性要小得多,但它超出了本答案的范围解释一下原因。

如果您将 Banana 实现为类集群,您也可以通过这种方式公开私有(private)成员变量,但这有点疯狂,我不推荐这样做。如果您需要类之间更紧密的耦合,您可能需要对这部分代码使用 C 习惯用法。

关于objective-c - Objective C 中的友元类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6006701/

相关文章:

ios - 从 iOS 10.3 开始 : UIButton ignoring negative paragraph lineSpacing in NSAttributedString

ios - 我可以在没有 SKAction 的情况下在屏幕上移动节点吗?

ios - 在 View Controller 之间传递数据

iphone - 使用 SDWebImage IOS 管理服务器上的图像更改

objective-c - NSString 发布

objective-c - 如何在应用程序处于焦点的情况下捕获键盘/鼠标事件?

objective-c - 如何以编程方式在 nsdate 中设置小时分钟?

ios - 将 Objective-C 框架暴露给 Swift

ios - 长日期(UNIX 日期)问题

ios - 在后台线程中创建 View Controller