繁体   English   中英

我正在学习的“ Objective-C”中有多少是通用的Objective-C,而不是Apple的框架?

[英]How much of the “Objective-C” I'm learning is universal Objective-C, and not Apple's frameworks?

这个问题与我的另一个有关C的问题有关: 如果没有“ std”包含,您可以在C中做什么? 它们是“ C”的一部分,还是只是库?

最近,我对核心Objective-C语言真正包含的内容以及我为iPhone / OS X开发所做的Objective-C的哪些部分特定于Apple平台感到好奇。

我知道语法之类的东西是相同的,但是例如, NSObject及其NS子类激流是否实际上是“标准” Objective-C的一部分? 我可以在Windows中使用它们吗?

哪些部分在大多数情况下是通用的,而我只能在Apple平台上找到哪些部分?

如果愿意,举一个在其他地方使用的Objective-C示例作为更“通用”的示例也将对我有帮助。

谢谢! =)

目前只有两种核心Objective-C库的实现,以前称为NextStep(因此带有NS前缀)和OPENSTEP: GNUStep和Apple的OSX。在Linux上,如果您保持与OPENSTEP规范的兼容性,则GNUStep可以很好地工作。 但是,该规范是古老的,并且OS X的现代代码可能无法正确工作(尤其是在UI区域)。 Windows上的情况更糟。

您可以在GCC支持构建目标的任何地方使用Objective-C语言。 “ NS”类不是语言本身的一部分。

如果您要维护代码库中跨平台的兼容性,请坚持使用C或C ++,仅将特定于UI的行为移至Objective-C。

Objective-c是C加上这些关键字:

@interface, @implementation, @protocol, @end, @private, @protected, @public, @try,
@throw, @catch, @finally, @class, @selector, @encode, @"string", @synchronized,
@property, @synthesized

加上消息发送语法: [anObject aMessage];

编辑

假设您有一个诸如GCC之类的Objective-c编译器,您仍然需要一个Objective-c运行时才能使上述内容正常工作。 例如[anObject aMessage]实际上被编译为

objc_msgSend( anObject, @selector(aMessage));

...因此,符号objc_msgSend是运行时必须存在的几种符号之一。 从理论上讲,这可以由内在的编译器提供,但是在实践中,您可能会链接到Objective-c运行时库-快速搜索我的硬盘驱动器会显示我已安装了三个: -AppleGNUStepCocotron-还有更多,但是苹果(开源)无疑是最重要和最有影响力的。

有了一个Objective-c编译器和运行时-但没有任何Apple Objective-c框架( NSObject等)-您拥有一个神话般且非常有用的 C-with-Classses,它简单得多(其中简单意味着“对我而言更好”)比C ++

类库都不是语言本身的一部分。 如果要查看核心的Objective-C类型,请查看include / objc。 核心语言本身,没有任何添加的库,确实很少,而且不是特别有用。

但是,实际上,几乎从未在像Cocoa或GNUstep这样的OpenStep框架的上下文之外使用Objective-C。 因此,您可以将其视为事实上的标准库,在这种情况下,Foundation几乎是通用的。 (不是基金​​会的100%这样,但多数是。)

您可以在Windows上使用Cocotron进行很多操作 ,这是Apple框架的免费实现。 它并不完整,您可能会遇到bug,但是如果幸运的话,您可以将Xcode项目作为Windows应用程序进行编译,而无需进行太多更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM