Objective C 中的友元类

2024-02-21

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

In cpp我们可以添加一个类friend class到另一个类并使用其所有公共函数和变量。

我知道Objective C does not support friend class概念。

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


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

In Banana.h:

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

In 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 中封装的方式相同。在我看来,它比 C 中的封装要少得多。friend关键字在C++,但解释原因超出了本答案的范围。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Objective C 中的友元类 的相关文章

  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 在 Objective C 的类方法中引用类本身

    我希望我没有跳过 ObjC 手册中的这一部分 但是是否可以从类的一个类方法中引用该类 就像在 PHP 中一样 您将使用 this 来引用当前实例 而 self 引用实例的类 this 的 ObjC 等价物将是 self 那么 PHP 的 s
  • UIPanGestureRecognizer 对坐标的限制

    我在主 UIView 中添加了一个子视图 称为panel 并且我向其中添加了gestureRecognizer 因为我希望它只能在Y轴上拖动并且只能在某些限制下 即160 300 超过300它不能拖动 我以这种方式实现了手势处理 IBAct
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai
  • PFQueryTableViewController 错误

    我正在遵循在线教程 使用 Parse 作为后端创建照片共享应用程序 我已经运行了两次教程 两次都从头开始创建应用程序 但在同一位置仍然出现相同的错误 我到处寻找解决方案 但仍然没有运气 我正在使用 PFQueryTableViewContr
  • 如何按字母顺序对 UITableView 分区进行排序?

    我有一个包含 3 个类别的分段 UITableView 我正在使用这段代码 NSArray arrayOne NSArray arrayWithObjects one two three four nil NSDictionary dict
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • iOS7 由 Interface Builder 生成的 NSIBPrototypingLayoutConstraint 自动布局约束问题

    以前在 iOS6 中 我的聊天消息视图控制器使用 IB 中精心构建的自动布局约束正确显示和动画 下面是 Xcode 5 中删除了约束的当前视图层次结构 升级到 XCode 5 和 iOS7 后 我发现我需要清除所有旧的约束才能解决默认的半透
  • 诊断和仪器均缺少“僵尸”选项

    运行 Xcode 4 0 2 Zombie 选项丢失 其他 SO 帖子建议找到它的两个地方 Product gt Run looks like this Product gt Profile looks like this 奇怪的是 我之前
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • cellForRowAtIndexPath 中的框架没有变化

    我想改变x位置框架view细胞内的cellForRowAtIndexPath对于某些条件 我使用了以下代码 但并不改变看法x position frame void viewDidLoad super viewDidLoad UINib n
  • 如何呈现半屏模态视图?

    我有一个 UIViewController 当按下按钮时 我想要一个半屏视图向上滑动 其中有一个 UIPicker 我在 IB 中使用 UIPicker 和带有 完成 取消 按钮的 UIToolBar 制作了一个 UIView 我怎样才能做
  • WKWebView不加载https URL?

    我有一个 WKWebView 应该加载以下网址 https buchung salonmeister de place offer details page id 907599 venueId 301655 她是我使用的代码 import
  • 创建电子书阅读应用程序的教程 - epub 文件格式 [重复]

    这个问题在这里已经有答案了 我正在制作一个电子书阅读应用程序 因为我想执行一些操作 例如更改文本颜色 字体 选择文本等 我知道 iphone os 4 0 和 ipad 现在支持 epub 文件格式 但我不知道如何创建此类应用程序 如果有人
  • 如何去除 UIImageView 遮罩后的透明区域?

    在我的一个 iOS 应用程序中 我尝试使用以下命令剪切图像的一部分CGImageMask 我已成功使用以下代码屏蔽图像 UIImage maskImage UIImage referenceImage withMask UIImage ma
  • 使用 iOS 7 检索设备 WiFi MAC 地址

    我们的应用程序使用设备 WiFi MAC 地址来唯一标识设备 根据苹果文档 https developer apple com news id 8222013a我们将开始使用 UIDevice 的identifierForVendor 属性
  • 如何通过填充 NSDictionary 以 JSON 格式发送 UIImage

    我正在尝试使用 JSON 将数据发送到服务器 我可以使用我的对象和关键参数创建 NSDictionary 但我想发送我的图片 图片是UIImage NSDictionary mainJSON NSDictionary dictionaryW
  • iPad 2 检测

    由于我没有 iPad 2 因此我需要知道调用 UIDevice currentDevice model 时它返回什么 我以为它只返回 iPad 但看来我错了 有人可以告诉我吗 Thanks 检查是否有带摄像头的 iPad BOOL isIP
  • 如何在 UITableView 中显示零行的表格

    我正在动态地将内容加载到 UITableView 中 如果有数据 表格需要显示数据 如果没有数据 表格应显示普通页面 但在我的应用程序中 表格显示带有两条分隔线的普通页面 我需要删除此分隔线并显示纯白色页面 请建议 任何帮助 将不胜感激 如
  • 如何将 NSSecureCoding 与 id 对象一起使用

    我正在创建一个链接列表并使用容器对对象 下一个和上一个属性进行分组 就像基金会收藏一样 我希望它能够实现NSSecureCoding 这是声明 interface ListContainer NSObject

随机推荐

  • Redux 状态正在更新,无需分派任何操作

    我首先应该说这不是重复的这个问题 恰好有相同的标题 https stackoverflow com questions 48648736 redux state is being edited without dispatching any
  • 正则表达式: boost::xpressive 与 boost::regex

    我想用 C 做一些正则表达式 所以我查看了 interwebz 是的 我是 C 的初学者 中级 并发现这个答案 https stackoverflow com questions 181624 c what regex library sh
  • Angular SSR NgApexcharts SVG 未定义

    最初我在使用 Angular SSR 时遇到了这个包的问题 因为我在导入时遇到了这个错误Window is not defined 但是 你可以在server ts通过以下方式 const MockBrowser require mock
  • Python 重定向(有延迟)

    所以我在 Flask 上运行了这个 python 页面 它工作得很好 直到我想要重定向 app route last visit def check last watered templateData template text water
  • JVM 压缩 Oops 背后的技巧

    So I understand the compressed oops is enabled by default in HotSpot VM now It has support for this from Java SE 6u23 on
  • 具有右锚定静态面板的可变高度 FlowLayoutPanel

    Take a good look at this 我有一个顶部面板它停靠在Top我的形式 AutoSize True AutoSizeMode GrowOnly 在里面我有一个流程布局面板停靠到Fill AutoSize True Auto
  • 如何删除 UITabBarItem SelectionImage 填充?

    我通过 UITabBar 外观将 SelectionIndicatorImage 设置为可拉伸图像 以适应各种设备宽度 UIImage selectedImage UIImage imageNamed SelectedTab stretch
  • Netbeans 模块中的 JAXB

    当我尝试在 netbeans 模块中运行 JAXB 编组器时 它们似乎是一个问题 最初我以为这是节点实现 所以我花了几天时间重新组织一切 但我仍然收到奇怪的错误消息 javax xml bind JAXBException ClassCas
  • 替换for循环Python中的字符串元素

    我正在从文本文件中读取数据 因此每一行都是一个字符串列表 所有这些列表都在数据列表中 所以我的列表看起来像 data row1 row2 etc row1 str1 str2 etc 我正在尝试删除行列表中的字符串中出现的任何 或 符号 我
  • LZW解压算法

    我正在为必须实现 LZW 压缩 解压缩的作业编写一个程序 我为此使用以下算法 压缩 w NIL while read a character k if wk exists in the dictionary w wk else add wk
  • 如何将按钮字体设置为 Marlett

    我正在尝试将按钮的字体设置为系统的 Marlett 字体 然而 虽然我手动设置了font face 但使用了其他字体 此外 当我使用字体对话框为该按钮选择字体时 Marlett 未列出 为什么会这样呢 如何在 NET Windows 窗体控
  • 第一个列表滚动在聚合物中结束后,铁滚动阈值永远不会执行

    我已经使用以下方法完成了iron list and iron scroll threshold为了在聚合物中实现无限滚动 但问题是 loadMoreDatairon scroll threshold在聚合物中第一个列表滚动结束后永远不会执行
  • Symfony 使用哪个单元测试框架?

    Symfony 使用哪个单元测试框架 Lime 还是 PHPUnit 使用它们有什么优点和缺点 在我看来 以下是我想到的一些事情 PHPUnit is more integrated with other tools like for in
  • MonoFoldable 有什么损失吗?

    单折叠 https hackage haskell org package mono traversable 1 0 0 1 docs Data MonoTraversable html t MonoFoldable in the 单通行
  • Laravel 5 MethodNotAllowedHttpException PUT

    我正在尝试更新用户 但是当我点击提交按钮时 Laravel 抛出以下错误 RouteCollection gt methodNotAllowed array GET HEAD POST 在 RouteCollection php 第 206
  • 开玩笑嘲笑参考错误

    我正在尝试使用以下模拟 const mockLogger jest fn jest mock myLoggerFactory gt type gt mockLogger 但是mockLogger会抛出引用错误 我知道笑话试图保护我免于超出模
  • 使用 jquery 禁用提交按钮

    我想在单击表单中的提交按钮后禁用它 以限制用户一次又一次地单击它 我用 jquery 尝试了这个 form submit function var formId this id if formId formId input type sub
  • 通过 PhpStorm 中的 Docker 容器使用 xdebug

    我读过一些关于此的文章 但没有一个对我的案例有帮助 或者只是忽略了缺失的部分 我无法使用 Docker 容器让 xdebug 在 PhpStorm 上工作 Docker compose yml version 2 services web
  • LEFT JOIN ON Google BigQuery 中的最近日期

    我有两个表 都有时间戳和更多数据 Table A name timestamp a data 1 2018 01 01 11 10 00 a 2 2018 01 01 12 20 00 b 3 2018 01 01 13 30 00 c T
  • Objective C 中的友元类

    我正在将 cpp 代码移植到 Objective C 中 In cpp我们可以添加一个类friend class到另一个类并使用其所有公共函数和变量 我知道Objective C does not support friend class概