【问题标题】:What’s the difference between Xcode, Objective-C and Cocoa?Xcode、Objective-C 和 Cocoa 有什么区别?
【发布时间】:2012-09-12 15:44:49
【问题描述】:

这个问题在这里经常出现,即使只是在用户错误标记他们的 iOS 问题时隐含地出现。那么,Xcode、Objective-C 和 Cocoa 有什么区别呢?

【问题讨论】:

  • 这是钢笔、英语和公共图书馆的区别。
  • @Catfish_Man 这真的是个很有帮助的人,而不是......特别是对于任何开始潜入 iOS 开发的人

标签: objective-c xcode cocoa-touch cocoa


【解决方案1】:

Objective-C 是一种编程语言。可以说,它只是对有效的 Objective-C 程序的外观和含义的描述。如果你有一个用 Objective-C 编写的源代码清单,你需要一个解释器或编译器来让这个清单工作。像 Objective-C 这样的语言通常是经过编译的,所以大多数人使用编译器(比如LLVM)。 Objective-C 几乎专门用于开发 iOS 和 OS X,但也有其他用途——例如,有些人为 Linux 编写 Objective-C。

您可以使用文本编辑器编写源代码并使用编译器将它们转换为实际程序,但使用现代技术需要处理的事情要多得多,因此还有另一个程序可以让您的工作更轻松。这些被称为集成开发环境或 IDE。 IDE 为您提供了一种方便的方式来编辑源代码、编译它们、调试生成的程序、阅读文档以及许多其他事情。 Xcode 就是这样一种 IDE。这里的一个重要观察是 Xcode 本身不会编译您的源代码,它只是调用独立编译器 (LLVM)。而且 Xcode 并不是您可以用来开发 Objective-C 应用程序的唯一 IDE——例如 AppCode

每次从头开始编写 iOS 或 OS X 应用程序将非常耗时。这就是为什么 Apple 为开发人员提供了一套好的库。这些库只是 Apple 编写的大量源代码,这些源代码处理了应用程序的大部分共同点。这些库称为 Cocoa。

现在,如果你不知道如何扩展一个类,你很可能在谈论 Objective-C。它与 Xcode 或 Cocoa 没有任何关系,您可以使用 Vim 作为 IDE 和 GCC 作为编译器为 Linux 编写一些 GNUstep 代码。另一方面,如果你的 Xcode 构建过程由于某些神秘的设置而失败,或者如果你试图在 Xcode 中构建一个静态库,这显然是一个 Xcode 问题。如果你不知道如何使用一些 NSObject 工具或 NSFileManager 类,那就是 Cocoa。 (但它不必与 Xcode 相关,因为您可以使用 AppCode 或 TextMate 作为您的 IDE!)


Originally available on my blog。在重新标记或解释差异时,请随意链接到博客文章或此问题。

【讨论】:

  • 好帖子,但我得问一下,基于这个声明......“这些库被称为 Cocoa”......出现了一个问题,“Foundation”和“Cocoa”框架之间有什么区别? Cocoa 是否位于 Foundation 框架之上?
  • 是的,Cocoa 可以说是位于 Foundation 之上的最顶层库层(参见 goo.gl/H22M8g)。换句话说,在这一点上的描述有点不准确——Cocoa 只是 Apple 提供的用于编写软件的软件堆栈的一部分。
  • 非常好的和解释性的答案..真的帮助我了解了差异。但是这里有另一个问题 :) 来自 Cocoa 库;和 API 一样吗?
【解决方案2】:

一个明显的错误是未能将 Xcode 与其他一切区分开来。 Xcode 是您用来编程的工具 - 用于编辑代码、运行代码等。因此,如果您在使用 工具 时遇到问题(例如,窗口无法正确显示您的代码,或者您在绘制界面时遇到问题等),这是 Xcode 的问题。

如果您不明白为什么您的代码不起作用,您可能遇到了 Objective-C 问题或 Cocoa 问题。但你不一定知道是哪个。

  • 如果您的问题根源在于您不知道该语言是如何工作的(例如您不知道星号的用途,或者该声明不是实例化,或者到 nil 的消息不会出错,但也不执行任何操作)。

  • 如果您不了解委托架构或视图控制器的工作原理,这就是 Cocoa 的问题。

但我对人们提出问题的方式的经验是,你可能不知道哪些你不知道。我不是指你个人,我指的是我们所有人。这会使正确提出问题变得困难,因为您不知道您不知道的到底是什么——如果您知道,您就会知道并且您可能不会遇到问题(您会正在解决问题并继续下一步)。

【讨论】:

    【解决方案3】:

    Xcode 是集成开发环境 (IDE) — 开发人员用来为 iOS 和/或 OS X 编写软件的应用程序。它包括编辑器、构建系统(确定构建什么来生成所需的目标)、还有很多其他的东西。

    Objective-C 是开发人员编写此类软件的主要语言。他们可以用纯 C 编写它的一部分,使用 C++ 或将其与 Objective-C 结合(产生 Objective-C++),或者编写部分或全部完全用另一种语言编写程序,例如 MacRuby、Java(使用 j2objc)或 C#(使用 MonoTouch)。

    Xcode 包含 Clang 编译器,它将用 Objective-C、C 和其他一些语言编写的代码转换为可执行代码。大多数错误消息来自 Clang,Xcode 在搜索索引、语法高亮和 Objective-C 代码的名称完成方面非常依赖它。

    Cocoa 和 Cocoa Touch 是应用程序框架。每一个都是一组许多单独的框架(存储在名为 blahblah.framework 的文件夹中的库),例如:

    • Foundation(两者):通用的面向对象实用程序,包括 NSString、NSURL、NSFileManager 等。
      • Core Foundation(两者):基本相同,但不同,主要在于拥有基于 C 的 API 而不是 Objective-C
    • Application Kit (Mac):应用程序和窗口框架
    • UIKit (iOS):应用程序和窗口框架
    • 核心图形(两者):绘图
    • 核心动画(两者):Sprite 管理和动画框架

    (还有很多很多,尤其是在 Mac 上)

    所以:

    • 您可以使用除 Cocoa 或 Cocoa Touch 之外的框架,但您必须在某种程度上具有一些 Cocoa/Cocoa Touch 代码,以便您的应用程序与系统通信,接收事件、绘图等。专门针对 Mac 和/或 iOS 的框架将包含不同质量级别的相关包装器。
    • 您可以使用 Objective-C 之外的语言,但您会遇到很多语法上的尴尬,因为大部分 Cocoa 和 Cocoa Touch 都是针对 Objective-C 的独特语法特性(尤其是选择器)而设计的。
    • 您可以使用 Xcode 之外的编辑器,甚至可以使用 Xcode 之外的构建系统(例如 make),但 Apple 的 App Store 期望应用程序以特定方式构建(尤其是在代码签名方面),所以除非您如果不是针对 App Store,任何其他构建系统都必须复制 Xcode 所做的事情,否则可能会导致用户被拒绝。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2011-01-18
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 2012-05-03
      相关资源
      最近更新 更多