Сколько из "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 без слишком большого количества изменений.