То, сколько из “Objective C” я изучаю, является универсальным Objective C и не платформами Apple?

Этот вопрос связан с одним из моих других о C: То, что можно сделать в C без “станд.”, включает? Они, отделяются “C” или просто библиотек?

Я стал любопытным в последнее время относительно того, что действительно содержится базовый язык Objective C, и какие части Objective C, который я сделал для разработки IPHONE/OS X, характерны для платформ Apple.

Я знаю, что вещами как синтаксис является то же, но например, NSObject и его поток NS- подклассы на самом деле часть "стандартного" Objective C? Я мог использовать их в, скажем, Windows?

Какие части универсальны по большей части, и какие части я только нашел бы на платформе Apple?

Если бы Вы хотите, давая пример Objective C, используемого в другом месте в качестве примера того, что более "универсально", помог бы мне также.

Спасибо! =)

11
задан Community 23 May 2017 в 12:04
поделиться

4 ответа

Существует только две текущие реализации основных библиотек Objective-C, ранее известных как NextStep (отсюда префиксы NS) и OPENSTEP: GNUStep и OS X от Apple. В Linux, если вы поддерживаете совместимость со спецификацией OPENSTEP, GNUStep работает очень хорошо. Однако спецификация древняя, и современный код для OS X, скорее всего, будет работать некорректно (особенно в области пользовательского интерфейса). На Windows ситуация еще хуже.

Вы можете использовать язык Objective-C везде, где GCC поддерживает цель сборки. Классы "NS" не являются частью собственно языка.

Если вы пытаетесь сохранить совместимость между платформами в своей кодовой базе, придерживайтесь языка C или C++, переносите в Objective-C только поведение, специфичное для пользовательского интерфейса.

13
ответ дан 3 December 2019 в 05:33
поделиться

Objective-c - это C плюс эти ключевые слова:

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

Плюс синтаксис отправки сообщений: [anObject aMessage];

EDIT

Учитывая, что у вас есть компилятор Objective-C, например GCC, вам все равно нужна среда выполнения Objective-C, чтобы заставить вышеупомянутые вещи работать. например. [anObject aMessage] фактически компилируется в

objc_msgSend( anObject, @selector(aMessage));

... поэтому символ objc_msgSend является одним из нескольких, которые должны существовать во время выполнения. Теоретически это может быть обеспечено внутренним свойством компилятора, но на практике вы, вероятно, будете ссылаться на библиотеку времени выполнения Objective-c - быстрый поиск на моем жестком диске показывает, что у меня установлены три библиотеки: Apple, GNUStep и Cocotron - есть и другие, но Apple (с открытым исходным кодом), без сомнения, является самой важной и влиятельной.

С компилятором Objective-c и средой выполнения - но без каких-либо фреймворков Apple Objective-c (NSObject и т.д.) - у вас есть потрясающий и очень полезный C-with-Classses, который намного проще (где проще означает "лучше для меня"), чем C++.

4
ответ дан 3 December 2019 в 05:33
поделиться

Вы можете многое сделать в Windows, используя Cocotron , который является бесплатной реализацией фреймворков Apple. Он не полный, и вы можете столкнуться с ошибками, но если вам повезет, вы можете скомпилировать свой проект Xcode как приложение Windows без особых изменений.

2
ответ дан 3 December 2019 в 05:33
поделиться

Ни одна библиотека классов не является частью самого языка. Если вы хотите увидеть основные типы Objective-C, загляните в include / objc. Сам базовый язык без какой-либо добавленной библиотеки действительно скуден и не особенно полезен.

На практике, однако, Objective-C почти никогда не используется вне контекста фреймворка OpenStep, такого как Cocoa или GNUstep. Таким образом, вы можете рассматривать это как стандартную де-факто библиотеку, и в этом случае Foundation почти универсален. (Таковы не 100% Foundation, но большинство.)

2
ответ дан 3 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: