【问题标题】:Xcode and objective c shenanigansXcode 和 Objective C 的恶作剧
【发布时间】:2011-08-15 21:24:13
【问题描述】:

Xcode、Cocoa touch 和 iOS 开发的新手。我正在为他们的 iPhone 课程参加斯坦福演练。我在几个地方有点困惑,需要向你们提出我的疑问:

我为我的模型创建了两个类,主要是 CalculatorBrain.m 和 CalculatorBrain.h。 据我所知,在Objective C中,创建一个类基本上由两个函数组成,一个是声明包含方法/消息和其他变量的类,而另一个是相同的实际实现。由此产生两个问题:

  1. 为什么我必须先声明一个类而不实现它的方法? (这个概念似乎是从接口中借来的)然后才继续实现它。

  2. 根据上面的问题,当我完成演练时,我注意到类声明发生在 CalculatorBrain.h 中,而方法实际上是在 CalculatorBrain.m 中实现的。我无法理解为什么要这样做的细微差别,所以如果有人愿意对此有所了解,那真的会有所帮助

再次感谢,

Parijat 卡利亚!!!

【问题讨论】:

  • 在 Objective C 中,你可以认为每个模块都有一个接口(.h文件)和一个实现(.m文件)。这与其他语言如 C、C++ 等非常相似。

标签: objective-c ios cocoa-touch xcode4


【解决方案1】:

这些是来自 C 世界的传统,它们只是避免一些问题的常见做法。它们不是两个类,它们是定义(在 .h 文件中)和实现(在 .c 或 .cc 文件中)。

如果您在 .c 文件中定义了该类,则无法在其他地方引用它,因为它不会被定义。您可以包含您的 .c 文件,但是您将拥有两个代码副本。您也可以使用“extern”关键字,但现在有点奇怪。

如果您将代码放在 .h 文件中,那么当它被包含时,代码就会被包含在内。这意味着您可能会收到编译器错误,因为您拥有三个“getMyThing”函数。

这意味着您可以将您的标头提供给其他人,而不会泄露您的绝密实现(对于制作库很有用),包含您的标头而不用担心可能的多个定义等。您还可以在.c 文件,使用标头的人(如您的其他代码)无法看到或使用,因此您不必担心以后更改它并导致编译中断。

【讨论】:

  • 这是一个非官方的界面。它具有相同的目的,但它不像 Java 中的接口那样是一种特殊的对象。将您的标头提供给其他人的主要原因是允许您的代码用作库或允许其他人扩展您的代码。标头包含编译器生成正确链接的代码所需的所有详细信息,而无需将它们绑定到实现。您会发现发行版中通常有 3 个 Linux 内核包:头文件、源代码和二进制文件。驱动器/程序通常需要标头,但不需要完整源代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-31
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
相关资源
最近更新 更多