Xcode,Objective-C和Cocoa有什么区别?

zou*_*oul 17 xcode cocoa cocoa-touch objective-c

这个问题经常出现在这里,即使用户误解他们的iOS问题时也是隐含的.那么,Xcode,Objective-C和Cocoa之间的区别是什么?

zou*_*oul 35

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没有任何关系,你可以很好地为Linux 编写一些GNUstep代码,使用Vim作为IDE,GCC作为编译器.另一方面,如果您的Xcode构建过程由于某些神秘的设置而失败,或者您尝试在Xcode中构建静态库,那么这显然是Xcode问题.如果你不知道如何使用一些NSObject工具或NSFileManager类,那就是Cocoa.(但它不必与Xcode相关,因为您可以使用AppCode或TextMate作为您的IDE!)


最初可以在我的博客上找到.重新标记或解释差异时,请随时链接到博客文章或此问题.


Pet*_*sey 7

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(both):一般面向对象的实用程序,包括NSString,NSURL,NSFileManager等.
    • 核心基础(两者):大多数情况相同,但不同,主要是基于C的API而不是Objective-C
  • 应用程序工具包(Mac):应用程序和窗口框架
  • UIKit(iOS):应用程序和窗口框架
  • 核心图形(两者):绘图
  • 核心动画(两者):精灵管理和动画框架

(还有很多,更多来自他们的地方,特别是在Mac上)

所以:

  • 您可以使用除Cocoa或Cocoa Touch之外的框架,但是您必须在某种程度上使用一些 Cocoa/Cocoa Touch代码,以便您的应用程序与系统通信,接收事件,绘制等等.目标Mac和/或iOS将为您提供不同质量的相关包装.
  • 您可以使用除Objective-C之外的语言,但是您会有很多语法上的尴尬,因为大多数Cocoa和Cocoa Touch都是针对Objective-C独特的语法特性(特别是选择器)而设计的.
  • 您可以使用除Xcode之外的编辑器,甚至可以使用除Xcode之外的构建系统(例如make),但Apple的App Stores期望以特定方式构建应用程序(特别是在代码签名方面),所以除非您没有定位在App Stores中,任何其他构建系统都必须复制Xcode所做的事情或冒着用户被拒绝的风险.