Iphone 有多少是「;目标-C“;I';m学习是通用的Objective-C,而不是Apple';什么是框架?

Iphone 有多少是「;目标-C“;I';m学习是通用的Objective-C,而不是Apple';什么是框架?,iphone,objective-c,ios,programming-languages,language-features,Iphone,Objective C,Ios,Programming Languages,Language Features,这个问题与我的另一个关于C的问题有关: 我最近开始好奇核心Objective-C语言到底包含了什么,以及我为iPhone/OSX开发所做的Objective-C的哪些部分是特定于苹果平台的 我知道像语法这样的东西是一样的,但是例如,NSObject和它的NS-子类实际上是“标准”Objective-C的一部分吗?我能在窗户里用吗 哪些部分在大多数情况下是通用的,哪些部分只有在苹果平台上才能找到 如果你愿意,举一个Objective-C的例子,作为一个更“通用”的例子,也会对我有所帮助 谢谢!=)

这个问题与我的另一个关于C的问题有关:

我最近开始好奇核心Objective-C语言到底包含了什么,以及我为iPhone/OSX开发所做的Objective-C的哪些部分是特定于苹果平台的

我知道像语法这样的东西是一样的,但是例如,
NSObject
和它的
NS
-子类实际上是“标准”Objective-C的一部分吗?我能在窗户里用吗

哪些部分在大多数情况下是通用的,哪些部分只有在苹果平台上才能找到

如果你愿意,举一个Objective-C的例子,作为一个更“通用”的例子,也会对我有所帮助


谢谢!=)

核心Objective-C库目前只有两种实现,以前称为NextStep(因此有NS前缀)和OPENSTEP:以及Apple的OS X。在Linux上,如果保持与OPENSTEP规范的兼容性,GNUStep工作得非常好。然而,该规范是古老的,现代OSX代码可能无法正常工作(特别是在UI领域)。Windows上的情况更糟

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


如果您试图在代码库中保持跨平台的兼容性,那么请坚持C或C++,只将UI特定的行为移到Objtovi.C.< /P> < P>类库中没有一个是语言本身的一部分。如果您想查看核心Objective-C类型,请查看include/objc。核心语言本身,没有任何附加的库,实际上是很少的,也不是特别有用


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

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

Objective-c是c加上以下关键字:

@interface, @implementation, @protocol, @end, @private, @protected, @public, @try,
@throw, @catch, @finally, @class, @selector, @encode, @"string", @synchronized,
@property, @synthesized
加上消息发送语法:
[anObject aMessage]

编辑 如果您有一个objective-c编译器,比如GCC,那么您仍然需要一个objective-c运行时,才能使上述内容正常工作。e、 g.
[anObject aMessage]
实际上编译为

objc_msgSend(一个对象,@selector(aMessage))

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


使用ObjyE-C编译器和运行时-但没有任何Apple Objto-C框架(<代码> NSbObjs<代码>等)-您有一个非常有用的C类,它比C++更简单(更简单的意思是“对我来说更好”)。因此我删除了它。例如,我如何在不使用

-(id)alloc
-(id)new
方法的情况下创建对象的实例<代码>MyObject*MyObject=
@chris,如果您要编写自己的基类,alloc的基本实现可能如下所示:-
id foo=malloc(class_getInstanceSize(self));foo->isa=self;返回foo然后您可以只执行MyObject*myObj=[MyObject alloc];我也必须自己写
class\u getInstanceSize(self)
吗?@chris:不,你不会。我意识到这突出了我的答案中的遗漏,如果有机会,我会更新它。谢谢更新!这无疑让我对Objective-C的工作原理有了更多的了解。干杯