Objective-C等效的Java包?

什么是Objective-C等效的Java包?您如何在Objective-C中组合和组织课程?
问题1:Objective-C等效的Java包?

Objective-C不具有Java包或C名称空间的等同物。部分原因是Objective-C最初是C上的非常薄的运行时层,并以C最小的方式将对象添加到C中。对我们来说不幸的是,命名冲突是我们在使用Objective-C时必须处理的。你赢了一些,你输了一些…

一个小的澄清(尽管它不是很安心)是Objective-C实际上有两个平面命名空间 – 一个用于类,一个用于协议(如Java的接口)。这不解决任何类命名冲突,但它的确意味着您可以拥有一个具有相同名称(如<NSObject>NSObject)的协议和类,后者通常采用(“实现”)前者。此功能可以防止Java中的“Foo / FooImpl”模式猖獗,但遗憾的是无法帮助类冲突。

问题2:如何[命名]并组织Objective-C类?

命名

以下规则是主观的,但它们是用于命名Objective-C类的体面准则。

>如果您的代码不能由其他代码运行(它不是框架,插件等,而是最终用户应用程序或工具),则只需避免与链接的代码冲突。通常,这意味着只要您使用的框架/插件/捆绑包具有正确的命名空间,您就可以免除前缀。
>如果您正在开发“组件化”代码(如框架,插件等),您应该选择一个前缀(希望是唯一的),并记录您的使用在某个地方可见,以便其他人知道以避免潜在的冲突。例如,CocoaDev wiki “registry”是一个事实上的公共论坛,用于在前缀上调用“dibs”。但是,如果您的代码类似于公司内部框架,您可能可以使用其他人已经执行的前缀,只要您没有使用该前缀。

组织

组织源文件在磁盘上是许多Cocoa开发人员不幸的掩饰。当您在Xcode中创建新文件时,默认位置是项目目录,就在项目文件旁边等等。我个人将源/测试代码(OCUnit等)中的应用程序源放在test /,所有资源(NIB / XIB文件,Info.plist,图像等)在资源/,等等。如果您正在开发一个复杂的项目,则基于功能将目录层次结构中的源代码分组也是一个很好的解决方案。无论如何,组织良好的项目目录可以更容易地找到您需要的内容。

Xcode真的不在乎你的文件位于哪里。项目侧栏中的组织完全独立于磁盘位置 – 这是一个逻辑(非物理)分组。您可以组织,但您喜欢侧栏,而不影响磁盘位置,这是很好的当您的源存储在版本控制。另一方面,如果将文件移动到磁盘上,则修补Xcode引用是手动且乏味的,但可以完成。从get-go创建您的组织是最简单的,并在他们所属的目录中创建文件。

我的想法

尽管有一个包/命名空间机制可能是很好的,但请勿呼吸,以免发生。阶级冲突在实践中相当罕见,发生后一般显而易见。命名空间真正是Objective-C中无问题的解决方案。 (另外,添加命名空间可以避免需要诸如前缀的解决方法,但是可能会在方法调用中引入更多的复杂性等)

由于类别的加载顺序是未定义的(非确定性的),更多的微妙和瑕疵的错误来自方法冲突,方法不仅通过子类添加和/或覆盖,而且还是类别,这可能导致讨厌的错误。实现类别是Objective-C最尖端的一个,只有当你知道你在做什么,特别是第三方代码,特别是Cocoa框架类时,才应该尝试。

翻译自:https://stackoverflow.com/questions/1000707/objective-c-equivalent-of-java-packages

转载注明原文:Objective-C等效的Java包?