在 Objective-c 中,如何创建一个可供所有子类访问但不能公开访问的方法

2024-01-15

假设我创建了一个 viewController。然后我想创建另一个类似于第一个视图控制器。看起来像是一份继承的工作。

然而,原始ViewController的许多任务都是私有方法,我想最小化公共接口。

如果我将这些方法声明为公开的话,那么就达不到私有的目的了。

如果我将这些方法声明为私有,那么子类将不知道这些方法。

如果我为子类创建一个特殊的 .h 文件,那就很尴尬了。

那么,做这类事情的行业标准方法是什么?

在 C++ 中,我们会使用受保护的方法或函数来完成此操作,对吗?

Update:

I put

#import "BGGoogleMap+protected.h"

@implementation BGGoogleMap ()

@end

这不起作用。它要求提供标识符。


除了 Catfish_Man 的建议之外,您还可以在类上创建只有您的子类可以访问的类别。这是文档 http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/objectivec/chapters/occategories.html如何做到这一点。基本上,您只需为您的类创建一个新接口并将所有私有方法放入其中。像这样:

@interface MyClass (MyClass_Private)
// Method declarations
@end

将它们放在 Foo_Internal.h 中,并将 Foo_Internal.h 包含在您的子类中,但不要将其公开。

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

在 Objective-c 中,如何创建一个可供所有子类访问但不能公开访问的方法 的相关文章

  • 原生插入符位置 macos cocoa

    我希望能够使用 cocoa 或 appleScript 获取 Mac High Sierra 中任何应用程序内的全局插入符位置 我已经使用 NSEvent 来获取键盘和鼠标挂钩 但是有没有办法获取插入符位置挂钩 插入符号与鼠标位置不同 它会
  • 将参数传递给基类构造函数

    如果基类和派生类都有带参数的构造函数 那么我们在哪里将参数传递给基类构造函数 像这样 public class DerivedClass BaseClass public DerivedClass int derivedParam Stri
  • 从 iPhone 设备查找当前国家/地区

    我必须在 iPhone 设置中获取当前国家 地区 谁能告诉我如何在 iPhone 应用程序中获取当前国家 地区 我必须使用当前国家 地区来解析需要传递当前国家 地区的 RSS 提要 请帮我找到那个国家 提前致谢 要查找用户选择的语言所在的国
  • 参考接口创建对象

    引用变量可以声明为类类型或接口类型 如果变量声明为接口类型 则它可以引用实现该接口的任何类的任何对象 根据上面的说法我做了一个理解上的代码 正如上面所说声明为接口类型 它可以引用实现该接口的任何类的任何对象 但在我的代码中显示display
  • UITableView 无法一直滚动到底部[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只是好奇 我做了一些UITable
  • 方法调用中的插入符[重复]

    这个问题在这里已经有答案了 我正在阅读本教程 并遇到了这行代码 这让我感到困惑 localSearch startWithCompletionHandler MKLocalSearchResponse response NSError er
  • Xcode 6.4 Swift 单元测试无法编译:“GPUImage.h 未找到”“无法导入桥接标头”

    我的 Xcode 项目构建并运行良好 它有 Swift 和 Objective C 代码 它已安装 GPUImage 我向它添加了单元测试 现在它将不再编译 找不到 GPUImage h 文件 导入桥接标头失败 以下是我发现并尝试过的解决方
  • 如何使用继承来建模 RESTful API?

    我有一个需要通过 RESTful API 公开的对象层次结构 但我不确定我的 URL 应该如何构建以及它们应该返回什么 我找不到任何最佳实践 假设我有从动物继承的狗和猫 我需要对狗和猫进行CRUD操作 我还希望能够对一般动物进行手术 我的第
  • 如何从 UILabel 创建图像?

    我目前正在 iPhone 上开发一个简单的类似 Photoshop 的应用程序 当我想要展平图层时 标签位于良好的位置 但字体大小不佳 这是我要展平的代码 UIGraphicsBeginImageContext CGSizeMake wid
  • 如何检测 UISearchBar/UITextField 输入中的暂停?

    我有以下 UISearchbar 代码 void searchBar UISearchBar searchBar textDidChange NSString searchText UIApplication sharedApplicati
  • 如何用Block简化回调逻辑?

    假设我需要与一个提供协议的类进行通信 并在操作完成时调用委托方法 如下所示 protocol SomeObjectDelegate required void stuffDone id anObject void stuffFailed e
  • 如何将字符串从 Applescript 传递到 Objective C

    我正在开发一个应用程序 我需要能够传递一个字符串变量 from 苹果脚本 to 目标C 我已经弄清楚如何从 Objective C 类中的方法运行 Applescript 但我需要能够将 NSString 设置为 Applescript 中
  • 显示器连接或断开连接时的通知

    我正在开发一个 OS X 应用程序 该应用程序在所有连接的显示器的所有可用空间上显示自定义窗口 我可以通过调用 NSScreen Screens 获取可用显示对象的数组 我目前缺少的是一种判断用户是否将显示器连接到系统或从系统断开屏幕的方法
  • 如何从 iOS 应用程序检测不安全的 wifi 网络

    我想检测我的应用程序中是否存在不安全的 wifi 网络 是否有任何公共 iOS API 可以实现相同的目的 没有记录的 API 可以获取该信息 如果您的应用程序需要通过网络发送和接收敏感数据 您通常应该假设没有安全连接
  • C# - 继承WPF布局 - Window from Window

    我的 Window 继承有问题 我不明白问题是什么 我认为 我的布局 MediaLibrary xaml 必须继承 MainWindow 但我不知道该怎么做 有2类 主窗口 xaml
  • Xcode 4 调试器代码完成

    首先 很高兴他们尝试在 Xcode 4 中的 gdb 命令提示符上完成代码 但在当前状态下 它使得使用命令提示符来调查目标 c 对象几乎不可能 当我打字时 它自动将单词补全为我不想要的内容 并且如果不手动选择文本并将其删除 然后重新开始 则
  • NSDateFormatter:根据 currentLocale 的日期,不包含年份

    这不会太难吧 我想显示不带年份的日期 例如 8 月 2 日 美国 或 02 08 德国 它也必须适用于许多其他语言环境 到目前为止 我唯一的想法是对年份进行正常格式 然后从生成的字符串中删除年份部分 我认为你需要看一下 NSString d
  • ios 11 - UIBarButtonItem 内的 UIButton 导致自动布局错误

    我在将 UIButton 添加到 UIBarButtonItem 时遇到了一个已知问题 我尝试按照建议添加自动布局约束堆栈溢出 https stackoverflow com a 46336639 505603但我收到如下所述的错误 UIB
  • Objective C (iphone) 关于发布的问题

    如果我创建一个视图 并将其添加为子视图并将其添加到数组中 是否必须释放它两次 UIView cat UIView alloc initWithFrame someFrame self view addSubview cat self ani
  • 如果加载 dylib,垃圾收集工作队列会崩溃

    我们正在将应用程序从 10 6 移植到 10 8 我正在查看我们在应用程序中加载的 dylib 我面临着非常不寻常的崩溃垃圾收集工作队列并附有以下消息 malloc Thread suspend unable to suspend a th

随机推荐

  • 通过 VBA 修改 Access 报告中的图表属性(错误 2771)

    我正在构建一个 Access 报告 2010 版 并且希望能够根据用户在表单上的选择来自定义它 当我运行它时 出现错误 2771 您尝试编辑的绑定或未绑定对象框架不包含 OLE 对象 这是传递参数的代码 Private Sub Comman
  • 如何强制 where 子句中的函数在 oracle 中执行一次?

    我正在尝试根据 IP 地址查询相当大的 IP 城市 3 000 000 多行 表 我的源 IP 地址是点分符号 例如 127 0 0 1 表有两个字段存储为整数 例如 2130706433 因此 我需要将点分符号转换为我的 where 子句
  • ASP.NET MVC 3 远程验证以允许原始值

    我的用户模型的电子邮件属性上有一个远程属性 当我创建新用户时 它会创建并告诉用户电子邮件已在使用中 现在我的编辑表单遇到问题 如果用户想要更新值 它告诉用户他 她的电子邮件已在使用中 当正在使用的电子邮件是用户注册的电子邮件时 我不希望它给
  • 奇怪的段错误,可能与 realloc 有关

    char dumpTB TB tb char text malloc sizeof char int i 0 int x 0 string index tNode curr tb gt head while curr NULL while
  • 何时使用 Task.Run().GetAwaiter().GetResult() 和 ().GetAwaiter.GetResult()? [复制]

    这个问题在这里已经有答案了 我有一个需要同步调用的异步任务 是的 不幸的是 这是不可避免的 似乎有两种方法可以实现这一点 每种方法似乎都有效 所以我不确定哪种方法是最好的方法 或者是否有更好的方法 例如 var meetings Task
  • Pig 本地模式、组或 join = java.lang.OutOfMemoryError: Java 堆空间

    Using Apache Pig 版本 0 10 1 21 报道 CentOS 版本 6 3 最终版 jdk1 6 0 31 Virtualbox 上的 Hortonworks Sandbox v1 2 具有 3 5 GB RAM cat
  • OCaml 中的函子

    我在函子 及其结果类型 方面遇到了一些问题 下面 我有一个Set使用一个函子Ordered类型 我实际上使用了set mlOCaml 附带提供一些指导 但我似乎正在做所有事情ahem正确的 我创建了一个Ordered模块与整数并将其应用到S
  • VBA:为什么人们在“Next”语句中包含变量的名称?

    我总是这样写我的 For 循环 For foo 1 to 10 do something Next 然而 当我在网上阅读代码片段时 人们总是这样做 For foo 1 to 10 do something Next foo 我没有注意到两者
  • SSIS 脚本编辑器加载速度非常慢

    在我的角色中 我偶尔会使用 SSIS 在我最新的包中 我使用了脚本任务 我的机器速度足够快 运行 64 位并且有大量内存 但每当我尝试编辑脚本时 我必须等待近一分钟才能加载代码 我正在使用 VS 2012 和 SQL 2012 任何想法 不
  • 在 Redshift 外部表中引用转义引号

    我正在尝试从 csv 中创建一个 Redshift 外部表 其中包含转义引号 如中所述rfc4180 https www rfc editor org rfc rfc4180 如果使用双引号将字段括起来 则使用双引号 出现在字段内的内容必须
  • Python - sys.stderr 未保存到 .txt 或 .log

    我正在检查标准流的工作情况 目前我正在使用stderr使用Python 为了解释清楚 以下是我的代码 print Python testt 当我运行代码时 我得到以下信息 Python Traceback most recent call
  • 如何将 ASP.NET Core 应用程序发布到 ftp 服务器

    Visual Studio发布仅支持导入Web部署 有解决方法吗 Visual Studio 发布配置文件支持纯 FTP 作为目标 但它不支持 SFTP 您应该看到以下选项 网络部署 网络部署包 FTP 不幸的是不支持SFTP 文件系统 U
  • 静态常量变量在子类中不是常量

    我使用的是 Visual Studio 2008 有两个类 Parent 和 Child Parent在头文件中声明了一些静态const变量 然后在cpp文件中定义这些变量 当我尝试在子类的 switch 语句中使用定义作为 case 时
  • Visual Studio 2012 条件捆绑

    我刚刚开始使用 VS 2012 RC 我创建了一个带有母版页和单个 Web 表单的测试站点 目前 我正在使用此代码来捆绑整个Styles网站上的文件夹 全局 asax BundleTable Bundles EnableDefaultBun
  • 如何使用 CoffeeScript 存在运算符来检查某些对象属性是否未定义?

    我想使用 CoffeeScript 存在运算符来检查某些对象属性是否未定义 然而 我遇到了一个小问题 代码如下 console log test if test 编译为 if typeof test undefined test null
  • 为什么C#不允许运算符重载?

    为什么 C 不允许运算符重载 而 C 却允许 尝试超载时出现此错误 预期可重载二元运算符 我的示例代码看起来像 public static MyClass operator MyClass obj1 MyClass obj2 您可以在 C
  • 在 rmarkdown html 输出中添加 X-UA-Compatible

    我正在尝试添加以下标签 as the first一后
  • 如何在动画之后将更改应用到视图位置?

    我将 TranslateAnimation 应用于带有 FillAfter true 的 EditText 以保持其在动画末尾的位置 动画工作正常 但问题是我无法再输入编辑文本 我认为这是因为动画仅影响渲染而不修改实际的视图坐标 是否有可能
  • 删除Linux上的终端输出

    我正在编写一个命令行程序 它将有一个状态栏 很像 wget 我面临的主要问题是 如何删除已经发送到 stdout stderr 的内容 我有一个想法 使用退格字符 b 并删除我发送的输出 这是最好的方法吗 这是唯一的方法吗 有没有更好的办法
  • 在 Objective-c 中,如何创建一个可供所有子类访问但不能公开访问的方法

    假设我创建了一个 viewController 然后我想创建另一个类似于第一个视图控制器 看起来像是一份继承的工作 然而 原始ViewController的许多任务都是私有方法 我想最小化公共接口 如果我将这些方法声明为公开的话 那么就达不