Какао или Objective-C? - PullRequest
       11

Какао или Objective-C?

8 голосов
/ 15 марта 2009

Что касается разработки для iPhone, как вам теперь, когда вы используете Какао против чистых объектов Objective-C. Например, следующие являются Objective-C:

  • NSTimer
  • NSString
  • int, float
  • NSMutableArray

Но это какао:

  • UILabel
  • UIColor (?)
  • UIView

И, чтобы быть ясным,

Cocoa Touch == разработка iPhone

Какао == Разработка для Mac OS X

Ответы [ 4 ]

41 голосов
/ 15 марта 2009

Вы неправильно поняли.

NSTimer, NSString, NSMutableArray - все это какао. int и float на самом деле являются C, но поскольку Objective-C является строгим надмножеством C, вы можете использовать их в своем коде Objective-C.

Чистый Objective-C требует соединения только с библиотекой времени выполнения Objective-C и никаких других платформ или библиотек. Какао - это структура, которая включает в себя такие вещи, как NSObject и NSString. Другие фреймворки, такие как AppKit, расширяют фреймворк Cocoa.

Кодирование в чистом Objective-C обычно означает получение от корневого объекта с именем Object, а не NSObject. Такие вещи, как @implementation, @interface, @selector и т. Д. Являются расширениями Objective C для C и являются общими для всех источников Objective C, чистыми или нет. Если вы хотите кодировать на чистом Objective-C, вы не можете использовать ничего, кроме ваших собственных объектов, полученных из Object.

#import <objc/Object.h>
9 голосов
/ 15 марта 2009

Как уже отмечалось, классы NS * на самом деле являются Какао, а не Objective-C. Objective-C - это язык, а Cocoa - это фреймворк (реализация OpenStep). Эту среду можно считать эквивалентом C ++ в stdlib. UI * классы - Cocoa Touch, еще одна структура, созданная для iPhone.

Что касается последнего вопроса, да, Cocoa Touch только для iPhone. Какао для Mac OS X разработки. Однако, как указано выше, Какао является реализацией OpenStep. Существуют альтернативы какао, такие как GNUstep и Cocotron. Эти альтернативные платформы позволяют использовать один и тот же код на нескольких платформах. Платформы OpenStep предназначены не только для разработки под Mac OS X, но и для Linux и Windows.

Еще одна вещь, на которую следует обратить внимание: другие среды выполнения Objective C отличаются. Единой спецификации Objective-C не существует. Portable Object Compiler - это еще один способ сделать это. Поскольку Apple является доминирующим пользователем Objective-C и контролирует Какао, это фактически считается реализацией Objective-C.

2 голосов
/ 11 августа 2009

Да, Cocoa Touch предназначен для разработки на iPhone и «простого» Какао для разработки на Mac OS X, но они не очень отличаются и разделяют большинство базовых классов.

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

Существует небольшая разница между Objective-C и простым старым подмножеством C. Выделение объектов и вызовы методов имеют более высокие издержки, чем структуры, выделенные из стека, и прямые вызовы функций, но в 99% случаев вам не нужно об этом заботиться (не пытайтесь оптимизировать преждевременно!).

1 голос
/ 15 марта 2009

Что касается разработки для iPhone, как вам теперь, когда вы используете Какао против чистых объектов Objective-C.

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

Если вы используете Python или Ruby, то ваши объекты будут объектами Python или Ruby. Но пока они наследуются от классов Какао, они будут доступны для других объектов Какао, независимо от того, написаны они в Objective-C или нет.

(Существует Core Foundation, который предоставляет объекты, которые отлично работают в Какао, но не написаны в Objective-C. Это деталь реализации; не беспокойтесь об этом.)

Например, Objective-C:

  • NSTimer
  • NSString
  • int, float
  • NSMutableArray

Только NSTimer, NSString и NSMutableArray являются классами Objective-C. int и float - это примитивные типы, а не классы. И ни один из них не взят из Objective-C: int и float - из C, а классы NS * - из Какао.

Как писал Себноу, когда я писал это, Какао - это фреймворк, тогда как Objective-C - это язык. Все классы NS * происходят из среды Какао, а не языка Objective-C.

Но это какао:

  • UILabel
  • UIColor (?)
  • UIView

Нет, это Касание Какао. Они не доступны в приложении Какао. Аналогично, классы Application Kit недоступны в Cocoa Touch.

(Какао - это основа + AppKit; Cocoa Touch - это основа + UIKit.)

И, чтобы быть ясным,

Cocoa Touch == разработка iPhone

Какао == Разработка для Mac OS X

Да. Cocoa Touch - это каркас iPhone; Какао - это структура Mac.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...