簡體   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