【问题标题】: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】:
存在三个问题:
-
对编译器隐藏。
也就是说,让其他人无法#import 某些内容并查看您的方法声明。为此,将您的私有 API 放入一个单独的头文件中,在 Xcode 中将该头的角色标记为“私有”,然后将其导入您需要访问该私有 API 的项目中。
使用类别或类扩展来声明其他方法。
-
防止碰撞
如果您要实现大量内部 goop,请使用公共前缀或与 Apple 提供(或第三方)提供的方法发生冲突的可能性极小。这对于类别尤其重要,而对于现有类的叶节点子类则几乎没有那么重要。
张贴该网站的链接,建议前导下划线,因为它们是错误的,错误的,错误的。系统使用前导下划线来标记私有 API,您很容易遇到冲突。
-
从运行时隐藏。
不要打扰。它只会让调试/崩溃分析变得更加困难,任何决心在运行时乱搞的人无论如何都可以破解你的应用程序。
【解决方案2】:
Objective C 中没有“真正的”私有方法,因为运行时将允许通过记录的公共 API 使用字符串名称访问任何类中的任何方法。
我从不为“私有”方法创建单独的接口文件,如果我尝试在文件范围之外使用这些方法中的任何一个,编译器会抱怨。
XX_ 似乎是创建伪命名空间的临时手段。我们的想法是阅读 Apple 的文档以及您将来可能随时使用的任何框架的文档,然后选择一个 XX 前缀,而这些前缀是其他任何人都不可能使用的。