2012-09-20 54 views
15

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

+31

这是一支钢笔,英语,公共图书馆之间的区别。 –

+2

@Catfish_Man这真的很有帮助的人,而不是...专门为任何人开始潜入iOS开发 – Leo

回答

32

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应用程序将非常耗时。这就是为什么苹果为开发人员提供了一套完善的库。这些库仅仅是苹果公司编写的大量源代码,而这个源代码负责处理大多数应用程序的共同点。这些库被称为可可。

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


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

+0

好帖子,但我得问,根据这个声明......“这些图书馆被称为可可”...一个问题出现了,“基础”和“可可”框架有什么区别?可可坐在基金会框架之上吗? – Leo

+0

是的,可可可以说是坐在基金会顶层的图书馆层(见http://goo.gl/H22M8g)。换句话说,这里的描述有点不准确 - Cocoa只是Apple提供的用于编写软件的软件栈的一部分。 – zoul

+0

非常好的和解释性的答案..真的帮助我知道不同之处。但是,这里来了另一个问题:)由可可图书馆;它与API相同吗? – Ahmadgeo

6

Xcode是集成开发环境(IDE) - 开发人员用于编写iOS和/或OS X软件的应用程序。它包括编辑器,构建系统(确定要构建哪些内容以生成期望的目标) ,还有其他一些事情。 Objective-C是开发人员编写此类软件的主要语言。他们可能会在纯C中使用C++,使用C++或将其与Objective-C(生成Objective-C++)组合,该程序完全使用另一种语言,例如MacRuby,Java(带有j2objc)或C#(带有MonoTouch)。

Xcode包含Clang编译器,它将用Objective-C,C和其他几种语言编写的代码转换为可执行代码。大多数错误消息来自Clang,而且Xcode严重依赖它来进行搜索索引,语法突出显示以及Objective-C代码的名称完成。

可可和Cocoa Touch是应用程序框架。每一个都是许多独立框架的集合(存储在名为blahblah的文件夹中的库。框架),如:

  • 基金会(两者):一般的面向对象的实用程序,包括的NSString,NSURL,的NSFileManager等
    • 核心基金(两者):晴同样的事情,但不同的,主要是在具有基于C的API而不是目标C
  • 应用工具包(苹果机):应用和窗口框架
  • UIKit的(IOS):应用和窗口框架
  • 核心的Gr aphics(两者):绘制
  • 的Core Animation(两者):雪碧管理和动画框架

(以及许多他们来自哪里,尤其是在Mac传来更多)

所以:

  • 可以使用除可可或可可触摸框架,但你必须有一些可可 /可可触摸代码,在一定程度上,为了让您的应用程序交谈的系统,接收事件,绘制等等专门针对Mac和/或iOS将为您提供不同级别的相关包装。
  • 除了Objective-C之外,您还可以使用一种语言,但是由于Cocoa和Cocoa Touch的大部分功能都是为Objective-C的独特语法功能(特别是选择器)设计的,因此会产生大量的语法尴尬。
  • 除了Xcode之外,您可以使用编辑器,甚至可以使用除Xcode之外的构建系统(例如make),但Apple的应用商店希望以特定方式构建应用程序(特别是在代码签名方面),所以除非您“不针对应用商店,任何其他构建系统都必须复制Xcode所做的事情,否则就有被用户拒绝的风险。
1

一个明显的错误是无法区分Xcode和其他东西。 Xcode是您用于编程的工具 - 编辑代码,运行代码等。因此,如果您在使用工具时遇到问题(例如,该窗口无法正确显示您的代码,或者您正在麻烦画你的界面等),这是一个Xcode的问题。

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

  • ,如果你的麻烦的根源是,你不知道怎么的语言作品(例如,你不知道星号是什么,或者该声明是不实例化这是一个Objective-C的问题,或者那些消息不会出错,但也不会做任何事情)。

  • 如果您没有掌握委托架构或视图控制器的工作原理,这是一个可可问题。

但我的人提出问题的方式的经验是,你可能是无知的这些你是无知的哪个。我个人并不是指你,而是指我们所有人。这可能会让你很难正确地提出问题,因为你不知道你到底知道了什么 - 如果你这样做了,你就会知道,你可能不会有问题(你会解决问题并继续下一件事)。