Программирование какао в C? - PullRequest
1 голос
/ 12 декабря 2010

Я бы хотел начать программировать на Mac.Пожалуйста:

  • Мне не очень нравится Objective-C, и я немного знаю C, я читал, что Objective-C - это "диалект" C - возможно ли программировать на Cи использовать все библиотеки и инфраструктуры, предоставляемые Mac OS (это Какао, верно?)?

  • если я хочу использовать, скажем, Scintilla - как мне «загрузить» его компонент редактирования текста в окно в GUI Builder?И как мне получить доступ к его текстовым буферам?А события?

Ответы [ 4 ]

12 голосов
/ 12 декабря 2010

Просто изучите Objective-C. Это не так сложно; намного, намного проще, чем, скажем, C ++. Объектная модель очень похожа на Java или SmallTalk.

Весь стек API-интерфейсов Какао находится в Objective-C, документация - в Objective-C, многие шаблоны проектирования (KVO, KVC, делегирование) по своей природе являются объектами Objective-C, и все примеры являются Objective -С.

Вам понадобятся практические знания Objective-C для эффективного программирования системы в любом случае. Любые попытки избежать Objective-C просто сделает вашу работу более трудной, приведет к снижению количества поддерживаемого кода и значительно сократит количество людей в сообществе, которые могут помочь.

8 голосов
/ 12 декабря 2010

Конечно, напрямую взаимодействуя со средой выполнения. Это значит, что вы будете много делать objc_msgSend() и соавт. Это будет ужасно больно, вы можете просто изучить синтаксис Objective-C и покончить с этим. (Я четко отмечаю синтаксис, потому что вам все равно нужно будет изучить, как objc работает, чтобы даже использовать API C).

2 голосов
/ 12 декабря 2010

В первую очередь я могу быть менее полезен: не слышав об этом, согласно его сайту, Scintilla предназначена для win32 и GTK +.Поскольку я считаю, что до сих пор нет собственной версии GTK + для Cocoa, нет способа использовать компонент Scintilla в программе Cocoa.OS X не основана на X11 (или Win32, если на то пошло).

Objective-C добавляет объекты в стиле Smalltalk и динамическую диспетчеризацию для C. Однако это строгий надмножество, поэтому код C может вызываться напрямую,Различные компоненты GUI основаны на динамическом, отражающем характере Objective-C, поэтому не могут напрямую вызывать C-код.Тем не менее, весь инструментарий построен вокруг парадигмы модель-представление-контроллер.Вполне выполнимо спроектировать ваше представление в Интерфейсном Разработчике, написать тонкую оболочку контроллера в Objective-C, которая делает чуть больше, чем вызов соответствующих функций C, и написать вашу модель полностью на C. Код C может вызывать код Objective-C, поэтомуВы можете обернуть столько системных объектов, сколько захотите.

Так что это в значительной степени «да» для вашей второй точки.Также важно то, что, хотя Objective-C возникла из C, Apple сделала C ++ полностью вызываемой (поиск Objective-C ++), так что это тоже вариант.

Стоит обратить внимание на Core Foundation .Изначально OS X поддерживала две среды программирования верхнего уровня - Cocoa и Carbon.Cocoa - это Objective-C, Carbon - это C с кучей устаревших библиотек поддержки (и в настоящее время устарела, 64-битная среда выполнения не предоставляется).Для поддержки обоих из них большая часть функциональности базовой системы предоставляется через интерфейсы C на самом низком уровне, включая все коллекции, строки и другие относительно примитивные объекты.Куча других важных для производительности вещей, таких как Core Text, Core Graphics и т. Д., Также обычно выполняются через прямой интерфейс C, даже если вы в остальном полностью увлечены Objective-C.

0 голосов
/ 12 декабря 2010

Существует API на основе C для программирования пользовательского интерфейса в Mac OS X, который называется Carbon . Если вы действительно не можете видеть Objective-C, я бы начал там. Многие классы и API Какао имеют соответствующие типы данных Carbon и т. Д. И наоборот, но не все. Честное предупреждение, Carbon считается «устаревшим» API, и он, вероятно, будет по-прежнему маргинализован с течением времени. Многие API-интерфейсы Carbon недоступны для 64-битных приложений, например,

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

...