Objective-C是否可以不使用Cocoa?

6

看起来Cocoa似乎是Objective-C的主要平台。GCC(Xcode使用的编译器)支持Objective-C,因此它必须在许多平台上可用。

有没有什么著名的跨平台项目使用Objective-C但不使用Cocoa(或其开源版本GNUStep)?它真的被用在苹果生态系统之外吗?


我无法确定你的措辞,但为了明确起见,你是否意识到GNUStep是跨平台的呢?“GNUstep目前支持Unix(GNU / Linux和GNU / HURD,Solaris,NetBSD,OpenBSD,FreeBSD,Darwin)和Windows”,引自http://www.gnustep.org/。 - Justin Smith
是的,我明白了。我来澄清一下。我的问题是想问 Obj-C 是否被用作通用编程语言(例如 C 或 C++),而不仅仅是用于与 Cocoa 或 GNUStep 等库/框架进行交互。 - Joe
3个回答

12

Objective-C在科学和金融服务社区也很受欢迎。目前仍然有许多基于Objective-C的银行应用程序,主要用于交易分析。我的一个朋友正在开发一个将近一百万行代码的Objective-C分析和交易引擎,他们从头开始编写了自己的类层次结构。

曾经有一段时间,较为流行的Linux窗口管理器是用Objective-C编写的。那是几年前的事情,现在可能不再适用。

LLVM编译器也可以编译Objective-C,并且完全支持Blocks。它也非常便携。

还有David Stes的Portable Object Compiler。它将Objective-C编译为C,并使用基于原始ICPak类层次结构的类层次结构。


4

看起来您询问的是Objective-C是否在没有Cocoa、GNUstep、Cocotron或任何类似它们的API的情况下被使用。

答案基本上是否定的。没有像Cocoa(或GNUstep等)这样的API,Objective-C就不是很有用。例如,如果没有NSObject,那么retain和release甚至都不存在。许多非常重要的功能都内置在这些API中,因此在没有其中之一的情况下使用Obj-C有点毫无意义。


好的。这就是我一直在寻找的答案!谢谢你。我忘了NSObject这个非常重要的类是在API中定义的,而不是语言本身(你可能会认为NS会让人想到...)顺便说一下,我之所以问这个问题是因为我正在考虑将一个纯C项目进行整理,加入一些Obj-C内容,这也引发了我提出这个问题的想法。 - Joe
2
Objective-C运行时(Mac OS X上较旧的运行时和GNU运行时)定义了一个名为“Object”的对象,它与“NSObject”有许多共同的方法,尽管有些方法名称不同。它不包含release/retain,但足以启动独立于Cocoa的自己的框架。 - dreamlax

0

是的,确实有。我能想到的一个是Cocotron。这是一个将AppKit移植到Windows的努力。

http://www.cocotron.org/

除此之外,Objective-C 可以在 gcc 支持的任何平台上使用。虽然您不会拥有在 OS X 或 iPhone 上的 Cocoa 中可用的丰富框架,但正如您所提到的,GNUStep 也做出了相当不错的努力。


GNUStep(包括wmaker窗口管理器和自己的图形应用程序构建器)绝对不是Apple API中心 - 它们源于与Cocoa基于相同的NeXTStep objectiveC。 - Justin Smith
这取决于你是否相信史蒂夫在1985年带走了苹果的精神... :) 我指的是NeXT及其后继者(包括苹果)。 - Joe
@Justin Smith:GNUstep并不包含wmaker,它们只是相互兼容,并且最近GNUstep试图专注于与苹果的兼容性。 - MKroehnert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接