Objective c Xcode和目标c骗局

Objective c Xcode和目标c骗局,objective-c,ios,cocoa-touch,xcode4,Objective C,Ios,Cocoa Touch,Xcode4,Xcode、Cocoa touch和iOS开发的新手。我正在为他们的iPhone课程进行斯坦福演练。我在几个地方有点困惑,需要向你们表达我的怀疑: 我为我的模型创建了两个类,基本上是CalculatorBrain.m和CalculatorBrain.h。 从我收集的信息来看,在Objective C中,创建一个类基本上由两个函数组成,一个是声明包含方法/消息和其他变量的类,另一个是该类的实际实现。由此产生了两个问题: 为什么我必须首先声明一个类而不实现它的方法?(这个概念似乎是从接口借用的)然后

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

我为我的模型创建了两个类,基本上是CalculatorBrain.m和CalculatorBrain.h。 从我收集的信息来看,在Objective C中,创建一个类基本上由两个函数组成,一个是声明包含方法/消息和其他变量的类,另一个是该类的实际实现。由此产生了两个问题:

  • 为什么我必须首先声明一个类而不实现它的方法?(这个概念似乎是从接口借用的)然后才开始实现它

  • 从上面的问题,在我进行演练时,我注意到类声明发生在CalculatorBrain.h中,而方法实际上是在CalculatorBrain.m中实现的。我无法理解为什么会这样做的细微差别。如果有人愿意解释一下,这真的会有所帮助

  • 再次感谢


    帕里贾特卡里亚

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

    如果在.c文件中定义了该类,则不能在其他地方引用它,因为它不会被定义。您可以包含.c文件,但这样您就有了两份代码副本。您也可以使用“extern”关键字,但在这一点上有点奇怪

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


    这意味着您可以将您的头提供给其他人,而无需泄露您的绝密实现(对制作库非常有用),包括您的头,而无需担心可能的多个定义等。您还可以在.c文件中添加使用头的人(如您的其他代码)看不到或使用的变量和函数,因此,您不必担心以后会更改它,也不必担心编译中断。

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

    如果在.c文件中定义了该类,则不能在其他地方引用它,因为它不会被定义。您可以包含.c文件,但这样您就有了两份代码副本。您也可以使用“extern”关键字,但在这一点上有点奇怪

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


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

    在Objective C中,您可以将每个模块视为有一个接口(.h文件)和一个实现(.m文件)。这与其他语言非常相似,如C、C++等。在Objic C中,可以将每个模块看作是具有接口(.h文件)和实现(.m文件)。这与其他语言非常相似,例如C语言、C++语言等等。它也有同样的用途,但不像Java中的接口那样是一种特殊的对象。将您的头提供给其他人的主要原因是允许您的代码用作库或允许其他人扩展您的代码。标头包含编译器生成正确链接的代码所需的所有详细信息,而无需将它们绑定到实现。您会发现在发行版中有3个Linux内核包是很常见的:header、source和binary。驱动器/程序通常需要标题,但不需要完整的源代码。这是一种非官方的界面。它也有同样的用途,但不像Java中的接口那样是一种特殊的对象。将您的头提供给其他人的主要原因是允许您的代码用作库或允许其他人扩展您的代码。标头包含编译器生成正确链接的代码所需的所有详细信息,而无需将它们绑定到实现。您会发现在发行版中有3个Linux内核包是很常见的:header、source和binary。驱动器/程序通常需要标题,但不需要完整的源代码。