Objective-C中的私有和受保护方法

时间:2011-01-23 23:04:20

标签: objective-c methods visibility conventions

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

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

2 个答案:

答案 0 :(得分:11)

有三个问题:

  1. 隐藏编译器。

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

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

  2. 防止碰撞

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

    发布网站的链接,建议引导下划线,因为它们是错误的,错误的,错误的。系统使用前导下划线来标​​记私有API,并且您可以轻松地遇到冲突。

  3. 隐藏在运行时。

    不要打扰。它只会使调试/崩溃分析变得更加困难,而且任何确定足以在运行时捣乱的人都能够破解你的应用程序。

答案 1 :(得分:1)

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

我从不为“私有”方法做单独的接口文件,如果我尝试在文件范围之外使用这些方法,那么让编译器抱怨。

XX_似乎是创建伪命名空间的临时方法。我们的想法是阅读Apple的文档和您将来可能使用的任何框架的文档,并选择一个XX前缀,其他任何一个都不可能使用。