В чем разница между Xcode, Objective-C и Cocoa?

Этот вопрос возникает довольно часто здесь, даже если он неявно, когда пользователи ошибаются в вопросах iOS. Итак, в чем разница между Xcode, Objective-C и Cocoa?

Ответы

Ответ 1

Objective-C - это язык программирования. Можно сказать, что его просто описание того, какие действительные программы Objective-C выглядят и что они означают. Если у вас есть список исходных кодов, написанный в Objective-C, вам нужен интерпретатор или компилятор, чтобы он включил листинг. Языки, подобные Objective-C, обычно компилируются, поэтому большинство людей использует компилятор (например, LLVM). Objective-C почти исключительно используется для разработки для iOS и OS X, но есть и другие виды использования - например, некоторые люди пишут Objective-C для Linux.

Вы можете использовать текстовый редактор для записи источников и компилятора, чтобы превратить их в настоящие программы, но с современными технологиями гораздо больше нужно позаботиться, чтобы была еще одна программа, облегчающая вашу работу. Они называются интегрированными средами разработки или IDE. IDE предлагает вам удобный способ редактировать источники, компилировать их, отлаживать полученные программы, читать документацию и многое другое. Xcode - одна из таких IDE. Важное замечание здесь заключается в том, что Xcode не компилирует ваши источники самостоятельно, он просто вызывает автономный компилятор (LLVM). И Xcode не является единственной средой разработки, которую вы можете использовать для разработки Objective-C приложений - theres AppCode, например.

Написание приложений iOS или OS X с нуля каждый раз было бы очень трудоемким. Вот почему Apple предоставляет разработчикам хороший набор библиотек. Библиотеки - это просто огромное количество исходного кода, написанного Apple, и этот исходный код заботится о большинстве вещей, которые имеют приложения. Эти библиотеки называются Cocoa.

Теперь, если вы не знаете, как расширить класс, вы, скорее всего, говорите о Objective-C. Он не имеет ничего общего с Xcode или Cocoa, вы можете очень хорошо написать код GNUstep для Linux, используя Vim как IDE и GCC в качестве компилятора, С другой стороны, если процесс сборки Xcode завершился неудачно из-за какой-то таинственной настройки или если вы пытаетесь создать статическую библиотеку в Xcode, это явно проблема с Xcode. И если вы не можете понять, как использовать какой-либо объект NSObject или класс NSFileManager, то Cocoa. (Но это не должно быть связано с Xcode, поскольку вы могли бы использовать AppCode или TextMate в качестве своей IDE!)


Первоначально доступно в моем блоге. Не стесняйтесь ссылаться на сообщение в блоге или на этот вопрос при повторной передаче или объяснении разницы.

Ответ 2

Xcode - это интегрированная среда разработки (IDE) - приложение, которое разработчики используют для написания программного обеспечения для iOS и/или OS X. Он включает в себя редактор, систему сборки (определение того, что строить для создания желаемой цели) и немало других вещей.

Objective-C - это основной язык, на котором разработчики пишут такое программное обеспечение. Они могут записывать биты в чистом C, использовать С++ или комбинировать его с Objective-C (создавая Objective-C ++) или писать некоторые или все программы на другом языке, например MacRuby, Java (с j2objc) или С# (с MonoTouch).

Xcode включает компилятор Clang, который превращает код, написанный в Objective-C, C, и несколько других языков в исполняемый код. Большинство сообщений об ошибках поступают от Clang, а Xcode сильно зависит от него для индексации поиска, выделения синтаксиса и завершения имени кода Objective-C.

Cocoa и Cocoa Touch - это приложения. Каждый из них представляет собой набор из нескольких отдельных фреймворков (библиотеки, хранящиеся в папках с именем blahblah.framework), например:

  • Foundation (оба): общие объектно-ориентированные утилиты, включая NSString, NSURL, NSFileManager и т.д.
    • Core Foundation (оба): в основном то же самое, но отличается, главным образом, наличием API на основе C, а не Objective-C
  • Application Kit (Mac): инфраструктура приложений и окон.
  • UIKit (iOS): инфраструктура приложений и окон.
  • Core Graphics (оба): Рисование
  • Core Animation (оба): среда управления Sprite и анимация

(и многие, многое другое, откуда они пришли, особенно на Mac)

Итак:

  • Вы можете использовать фреймворк помимо Cocoa или Cocoa Touch, но на каком-то уровне вам понадобится код Cocoa/Cocoa Touch, чтобы ваше приложение могло разговаривать с системой, получать события, рисование и т.д. Рамки, специально предназначенные для Mac и/или iOS, будут включать в себя соответствующие обертки для вас на разных уровнях качества.
  • Вы можете использовать язык помимо Objective-C, но у вас будет много синтаксической неловкости, так как большинство Cocoa и Cocoa Touch предназначены для Objective-C уникальных синтаксических функций (в частности, селекторов).
  • Вы можете использовать редактор помимо Xcode, и вы даже можете использовать систему сборки помимо Xcode (например, make), но Apple App Store ожидают, что приложения будут созданы определенным образом (особенно в отношении подписи кода), поэтому, повторно не ориентируясь на магазины приложений, любая другая система сборки должна реплицировать то, что делает Xcode, или подвергать своих пользователей отказу.

Ответ 3

Явная ошибка не позволяет отличить Xcode от всего остального. Xcode - это инструмент, который вы используете для программирования - для редактирования кода, запуска кода и т.д. Поэтому, если у вас возникли проблемы с инструментом (например, окно не показывает ваш код правильно, или у вас возникли проблемы с рисованием ваш интерфейс и т.д.), что проблема Xcode.

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

  • Это проблема Objective-C, если корень вашей проблемы состоит в том, что вы не знаете, как работает язык (например, вы не знаете, для чего предназначена звездочка, или это объявление не является экземпляром, или что сообщения нильны не выходят из строя, но ничего не делают).

  • Это проблема Cocoa, если вы не понимаете архитектуру делегата или как работает контроллер представления.

Но мой опыт того, как люди задают вопросы, состоит в том, что вы можете быть не осведомлены о том, из какого из них вы не знаете. Я не имею в виду вас лично, я имею в виду всех нас. Это может затруднить постановку вопроса должным образом, потому что вы не знаете, что именно вы не знаете - если бы вы это сделали, вы бы это знали, и у вас, вероятно, не возникло бы проблемы (вы бы устраняя проблему и на следующую вещь).

Ответ 4

Это разница между ручкой, английским и публичной библиотекой.

@catfish_man