Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C中的私有和受保护方法_Objective C_Methods_Visibility_Conventions - Fatal编程技术网

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

Objective-C中的私有和受保护方法,objective-c,methods,visibility,conventions,Objective C,Methods,Visibility,Conventions,在Objective-C中定义私有和受保护方法的推荐方法是什么?一个网站建议在实现文件中为私有方法使用类别,另一个建议使用尾随下划线,或者XX_uu,其中XX是一些特定于项目的代码。苹果自己用什么 那么受保护的方法呢?我读到的一个解决方案是在单独的文件中使用类别,例如CLASS_protected.h和CLASS_protected.m,但这似乎会变得非常臃肿。我该怎么办?有三个问题: 对编译器隐藏 也就是说,使其他人无法#导入某些内容并查看您的方法声明。为此,将您的私有API放入一个单独的头文

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


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

有三个问题:

  • 对编译器隐藏

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

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

  • 防止碰撞

    如果你正在实现大量的内部goop,那么使用一个通用的前缀或者一些与Apple提供的(或第三方提供的)方法不太可能发生冲突的东西来实现。这对于类别来说尤其重要,而对于现有类的叶节点子类来说则不那么重要

    发布网站的链接,建议使用前导下划线,因为它们错了,错了,错了。系统使用前导下划线来标记私有API,因此很容易发生冲突

  • 从运行时隐藏

    不用麻烦了。这只会使调试/崩溃分析变得更加困难,任何人只要下定决心在运行时胡闹,无论如何都可以破解你的应用程序

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

    我从不为“private”方法单独创建接口文件,如果我试图在文件范围之外使用这些方法,编译器会抱怨

    XX_u似乎是创建伪名称空间的特别方法。我们的想法是阅读苹果公司的文档以及未来任何时候可能使用的任何框架的文档,并选择一个其他人都不可能使用的XX前缀。

    以下是请求的链接: