|
|
1
31
问题1:Java包的Objto-C等价物?Objest-C没有Java包或C++命名空间的等价物。部分原因是Objective-C最初是C之上一个非常薄的运行时层,并以最小的模糊度将对象添加到C中。不幸的是,对我们来说,命名冲突是我们在使用Objective-C时必须处理的事情。你赢了一些,你输了一些…… 一个小的澄清(虽然它没有多少安慰)是Objto-C实际上有两个平坦的名字空间,一个用于类,一个用于协议(比如Java的接口)。这并不能解决任何类命名冲突,但它确实意味着可以有一个具有相同名称的协议和类(如 <NSObject> 和 NSObject )后者通常采用(“实施”)前者。这个特性可以防止Java中的“Foo/FoimIl”模式猖獗,但遗憾的是,它对类冲突没有帮助。 问题2:如何[命名]和组织目标C课程?命名 下面的规则是主观的,但它们是命名Objective-C类的合适指南。
组织机构 在磁盘上组织源文件是许多Cocoa开发人员不幸掩盖的事情。当您在Xcode中创建一个新文件时,默认位置是项目目录,就在您的项目文件旁边,等等。我个人将应用程序源放在 源/ ,中的测试代码(ocunit等) 试验/ ,中的所有资源(NIB/XIB文件、info.plist、图像等) 资源/ 等等。如果您正在开发一个复杂的项目,那么在基于功能的目录层次结构中对源代码进行分组也是一个很好的解决方案。在任何情况下,一个组织良好的项目目录都可以更容易地找到您需要的东西。 Xcode真的不关心文件的位置。项目侧边栏中的组织完全独立于磁盘位置,它是一个逻辑(而非物理)分组。您可以在侧边栏中随意组织,而不影响磁盘位置,当源代码存储在版本控制中时,这很好。另一方面,如果您在磁盘上移动文件,那么修补xcode引用是手动的、繁琐的,但是可以做到。最简单的方法是从GET GO中创建组织,并在它们所属的目录中创建文件。 我的意见虽然拥有一个包/名称空间机制可能会很好,但是不要屏住呼吸等待它发生。 阶级冲突在实践中很少见 当它们发生时,通常都是显而易见的。名称空间实际上是针对Objective-C中的一个非问题的解决方案(此外,添加名称空间可以避免对诸如前缀之类的解决方法的需要,但在方法调用等方面可能会带来更多的复杂性)。 更微妙和更狡猾的虫子来自 方法冲突 当方法被添加和/或重写时,不仅是子类,而且是类别,这会导致严重的错误,因为类别的加载顺序是未定义的(不确定的)。实现类别是Objective-C最尖锐的边缘之一,只有在您知道自己在做什么的情况下,尤其是对于第三方代码,以及 尤其地 对于cocoa框架类。 |
|
|
2
4
|
|
|
3
3
见 What is the best way to solve an Objective-C namespace collision? 为了讨论Objective-C如何没有名称空间,以及痛苦的黑客攻击,这是必要的。 |
|
4
1
不可原谅的目标C与Java、C++和Java包没有任何等价的命名空间。 命名冲突可以通过给出上下文名称来解决,例如,如果要给方法命名,它应该暗示它所包含的类和模块,这样……就可以避免这些问题。 按照苹果公司的建议,通过以下网址了解更多有关命名约定的信息 |
|
|
5
0
像这样的东西(在目录里)怎么样?
像这样导入:
当你有名字冲突时:
|
|
6
-1
好吧,我认为这里的所有其他答案似乎都集中在命名冲突上,但至少错过了一个重要的特性, 包专用访问控制 Java包提供的。 当我设计一个类时,我发现通常我只需要一些特定的类来调用它的方法,B/C它们一起工作来完成一个任务,但是我不希望所有其他不相关的类都调用这些方法。这就是Java包访问控制很方便的地方,因此我可以将相关的类分组到打包中,并使这些方法封装私有访问控制。但在目标C中没有办法做到这一点。
如果没有包私有访问控制,我发现很难避免人们编写这样的代码,
更新:xcode 4.4引入了“一个objective-c类扩展头”,在我看来,这在某种程度上提供了“package private access control”,所以如果包含扩展头,可以调用我的“package private”方法;如果只包含我的public头,只能调用我的public api。 |
|
|
George Kim · 如何在iOS中模拟特定坐标空间中的触摸? 2 年前 |
|
|
BENG · 协调C++和Objective-C中结构的填充 2 年前 |
|
|
Community wiki · iPhone上ivar的继承问题 3 年前 |
|
|
Community wiki · 在OpenGL中显示YUV 3 年前 |
|
|
YosiFZ · pod更新依赖关系pod 3 年前 |
|
|
Community wiki · 查找iOS日历 3 年前 |