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

Private and protected methods in Objective-C

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

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


有三个问题:

  • 对编译器隐藏。

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

    使用类别或类扩展来声明附加方法。

  • 防止碰撞

    如果您正在实现许多内部goop,那么使用一个公共前缀或与苹果提供的(或第三方提供的)方法发生冲突的东西来实现这一点是非常不可能的。这对于类别尤其重要,而对于现有类的叶节点子类则没有那么重要。

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

  • 在运行时隐藏。

    不用麻烦了。它只是让调试/崩溃分析变得更加困难,任何一个在运行时有足够决心的人都可以黑客攻击你的应用程序。


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

    我从不为"private"方法单独做接口文件,如果我试图在文件范围之外使用这些方法,就让编译器抱怨。

    xx_uu似乎是创建伪名称空间的特别方法。其目的是阅读苹果的文档和未来任何时候可能使用的任何框架的文档,并选择其他任何框架都不可能使用的xx前缀。