Сколько из "Objective-C", которое я изучаю, является универсальным Objective-C, а не каркасами Apple?

Этот вопрос связан с одним из моих других о C: Что вы можете сделать на C без "std" ? Являются ли они частью "C" или просто библиотек?

В последнее время мне стало любопытно, что на самом деле содержит основной Objective-C язык, а какие части Objective-C, которые я сделал для разработки iPhone/OS X, относятся к платформам Apple.

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

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

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

Спасибо! =)

Ответ 1

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

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

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

Ответ 2

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, чтобы заставить эти вещи работать. например [anObject aMessage] фактически скомпилирован в

objc_msgSend( anObject, @selector(aMessage));

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

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

Ответ 3

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

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

Ответ 4

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