[英]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运行时库-快速搜索我的硬盘驱动器会显示我已安装了三个: -Apple , GNUStep和Cocotron-还有更多,但是苹果(开源)无疑是最重要和最有影响力的。
有了一个Objective-c编译器和运行时-但没有任何Apple Objective-c框架( NSObject
等)-您拥有一个神话般且非常有用的 C-with-Classses,它简单得多(其中简单意味着“对我而言更好”)比C ++
类库都不是语言本身的一部分。 如果要查看核心的Objective-C类型,请查看include / objc。 核心语言本身,没有任何添加的库,确实很少,而且不是特别有用。
但是,实际上,几乎从未在像Cocoa或GNUstep这样的OpenStep框架的上下文之外使用Objective-C。 因此,您可以将其视为事实上的标准库,在这种情况下,Foundation几乎是通用的。 (不是基金会的100%这样,但多数是。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.