【问题标题】:Private and protected methods in Objective-CObjective-C 中的私有和受保护方法
【发布时间】:2011-06-14 05:05:49
【问题描述】:

在 Objective-C 中定义私有和受保护方法的推荐方法是什么?一个网站建议在私有方法的实现文件中使用类别,另一个建议使用尾随下划线或 XX_,其中 XX 是一些特定于项目的代码。苹果自己用什么?

那么受保护的方法呢?我阅读的一种解决方案是在单独的文件中使用类别,例如 CLASS_protected.h 和 CLASS_protected.m 但这似乎会变得非常臃肿。我该怎么办?

【问题讨论】:

    标签: objective-c methods visibility conventions


    【解决方案1】:

    存在三个问题:

    1. 对编译器隐藏。

      也就是说,让其他人无法#import 某些内容并查看您的方法声明。为此,将您的私有 API 放入一个单独的头文件中,在 Xcode 中将该头的角色标记为“私有”,然后将其导入您需要访问该私有 API 的项目中。

      使用类别或类扩展来声明其他方法。

    2. 防止碰撞

      如果您要实现大量内部 goop,请使用公共前缀或与 Apple 提供(或第三方)提供的方法发生冲突的可能性极小。这对于类别尤其重要,而对于现有类的叶节点子类则几乎没有那么重要。

      张贴该网站的链接,建议前导下划线,因为它们是错误的,错误的,错误的。系统使用前导下划线来标​​记私有 API,您很容易遇到冲突。

    3. 从运行时隐藏。

      不要打扰。它只会让调试/崩溃分析变得更加困难,任何决心在运行时乱搞的人无论如何都可以破解你的应用程序。

    【讨论】:

    【解决方案2】:

    Objective C 中没有“真正的”私有方法,因为运行时将允许通过记录的公共 API 使用字符串名称访问任何类中的任何方法。

    我从不为“私有”方法创建单独的接口文件,如果我尝试在文件范围之外使用这些方法中的任何一个,编译器会抱怨。

    XX_ 似乎是创建伪命名空间的临时手段。我们的想法是阅读 Apple 的文档以及您将来可能随时使用的任何框架的文档,然后选择一个 XX 前缀,而这些前缀是其他任何人都不可能使用的。

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2011-07-09
      • 2011-04-13
      • 2012-01-09
      • 2011-06-19
      • 2019-02-10
      • 2013-12-14
      相关资源
      最近更新 更多