stringtranslate.com

Какао (API)

Cocoa — это собственный объектно-ориентированный интерфейс программирования приложений (API) Apple для настольной операционной системы macOS .

Cocoa состоит из платформ Foundation Kit , Application Kit и Core Data , включенных в Cocoa.hзаголовочный файл, а также библиотек и платформ, включенных в них, таких как стандартная библиотека C и среда выполнения Objective-C. [1]

Приложения Cocoa обычно разрабатываются с использованием инструментов разработки, предоставляемых Apple, в частности Xcode (ранее Project Builder ) и Interface Builder (теперь часть Xcode), с использованием языков программирования Objective-C или Swift . Однако доступ к среде программирования Cocoa можно получить с помощью других инструментов. Также можно писать программы Objective-C Cocoa в простом текстовом редакторе и собирать их вручную с помощью GNU Compiler Collection (GCC) или Clang из командной строки или из make-файла .

Для конечных пользователей приложения Cocoa — это приложения, написанные с использованием среды программирования Cocoa. Такие приложения обычно имеют знакомый внешний вид, поскольку среда программирования Cocoa предоставляет множество общих элементов пользовательского интерфейса (таких как кнопки, полосы прокрутки и т. д.) и автоматизирует многие аспекты приложения в соответствии с рекомендациями Apple по человеческому интерфейсу .

Для iOS , iPadOS , tvOS и watchOS существует аналогичный API под названием Cocoa Touch , который включает в себя распознавание жестов , анимацию и другой набор графических элементов управления . Он используется в приложениях для устройств Apple, таких как iPhone , iPod Touch , iPad , Apple TV и Apple Watch .

История

Cocoa продолжает линию нескольких программных платформ (в основном App Kit и Foundation Kit ) из сред программирования NeXTSTEP и OpenStep , разработанных NeXT в 1980-х и 1990-х годах. Apple приобрела NeXT в декабре 1996 года и впоследствии приступила к работе над операционной системой Rhapsody , которая должна была стать прямым преемником OpenStep. Он должен был иметь базу эмуляции классических приложений Mac OS под названием Blue Box . База библиотек OpenStep и поддержка двоичных файлов получила название Yellow Box . Rhapsody превратилась в Mac OS X, а Yellow Box стал Cocoa. Таким образом, классы Cocoa начинаются с букв NS , например NSString или NSArray. Они обозначают оригинальный фирменный термин для платформы OpenStep — NeXTSTEP. [2]

Большая часть работы, затраченной на разработку OpenStep, была применена к разработке Mac OS X, причем Cocoa была наиболее заметной частью. Однако различия существуют. Например, NeXTSTEP и OpenStep использовали Display PostScript для отображения текста и графики на экране, а Cocoa зависит от Apple Quartz (который использует модель обработки изображений в формате Portable Document Format (PDF), но не лежащую в ее основе технологию). Cocoa также имеет определенный уровень поддержки Интернета, включая HTML- классы NSURL и WebKit и другие, в то время как OpenStep имел лишь элементарную поддержку управляемых сетевых подключений через классы NSFileHandle и сокеты Беркли .

Получившаяся программная платформа из соображений удобства получила название Cocoa , поскольку это имя уже было зарегистрировано как торговая марка Apple. За много лет до нынешнего использования названия торговая марка Apple Cocoa возникла как название приложения для разработки мультимедийных проектов для детей. Первоначально приложение было разработано в Apple Advanced Technology Group под названием KidSim , а затем было переименовано и зарегистрировано под торговой маркой «Cocoa». Название, придуманное Питером Дженсеном, который был нанят для разработки Cocoa для Apple, было призвано напоминать «Java для детей», поскольку оно было встроено в веб-страницы. [3] Товарный знак и, следовательно, название «Какао» были использованы повторно, чтобы избежать задержки, которая могла бы возникнуть при регистрации нового товарного знака для этой программной среды. Первоначальная программа «Какао» была прекращена в Apple по одной из причин , последовавших за возвращением Стива Джобса в Apple. Затем он был передан по лицензии третьей стороне и до 2014 года продавался как Stagecast Creator .

Управление памятью

Одной из особенностей среды Cocoa является возможность управления динамически выделяемой памятью. Класс NSObject Foundation Kit , от которого произошло большинство классов, как поставщиков, так и пользователей, реализует схему подсчета ссылок для управления памятью. Объекты, производные от корневого класса NSObject, отвечают на сообщение retainи releaseсохраняют счетчик сохранения. Метод с названием retainCountсуществует, но, вопреки его названию, обычно не возвращает точное количество сохранений объекта. В основном он используется для целей системного уровня. Apple не рекомендует вызывать его вручную.

Вновь выделенный объект, созданный с allocили copyимеющий счетчик сохранения, равный единице. Отправка этому объекту retainсообщения увеличивает счетчик сохранения, а отправка releaseсообщения уменьшает счетчик сохранения. Когда счетчик сохранения объекта достигает нуля, он освобождается с помощью процедуры, аналогичной деструктору C++ . deallocне гарантируется вызов.

Начиная с Objective-C 2.0, среда выполнения Objective-C реализовала дополнительный сборщик мусора , который сейчас устарел и устарел в пользу автоматического подсчета ссылок (ARC). В этой модели среда выполнения превратила операции подсчета ссылок Cocoa , такие как «сохранение» и «выпуск», в пустые операции . Сборщик мусора не существует в реализации iOS Objective-C 2.0. Сборка мусора в Objective-C выполняется в фоновом потоке с низким приоритетом и может останавливаться на пользовательских событиях Cocoa, чтобы обеспечить оперативность взаимодействия с пользователем. Устаревший сборщик мусора по-прежнему доступен в Mac OS X версии 10.13, но ни одно приложение Apple его не использует.

В 2011 году компилятор LLVM представил автоматический подсчет ссылок (ARC), который заменяет обычный сборщик мусора, выполняя статический анализ исходного кода Objective-C и вставляя сообщения сохранения и выпуска по мере необходимости.

Основные фреймворки

Cocoa состоит из трёх объектных библиотек Objective-C , называемых frameworks . Фреймворки функционально аналогичны разделяемым библиотекам — скомпилированному объекту, который можно динамически загружать в адресное пространство программы во время выполнения, но фреймворки добавляют связанные ресурсы, файлы заголовков и документацию. Фреймворки Cocoa реализованы как своего рода пакет , содержащий вышеупомянутые элементы в стандартных местах.

Ключевой частью архитектуры Cocoa является ее комплексная модель представлений. Он организован по традиционным принципам для среды приложений, но основан на модели рисования в формате PDF, предоставляемой Quartz . Это позволяет создавать собственный контент для рисования с использованием команд рисования, подобных PostScript , что также обеспечивает автоматическую поддержку принтера и т. д. Поскольку платформа Cocoa управляет всеми обрезками, прокруткой, масштабированием и другими задачами по рисованию графики, программист освобождается от реализации базовой инфраструктуры и может сосредоточиться на уникальных аспектах содержимого приложения.

Модель-представление-контроллер

Команды Smalltalk в Xerox PARC в конечном итоге остановились на философии дизайна, которая привела к простоте разработки и многократному использованию кода. Эта концепция , получившая название модель-представление-контроллер (MVC), разбивает приложение на три набора взаимодействующих классов объектов:

Дизайн Cocoa представляет собой справедливое, но не абсолютно строгое применение принципов MVC. В OpenStep большинство предоставляемых классов были либо классами представления высокого уровня (в AppKit), либо одним из ряда классов моделей относительно низкого уровня, таких как NSString. По сравнению с аналогичными системами MVC, OpenStep не имел мощного уровня модели. Например, ни один класс акций не представлял собой «документ». При переходе на Cocoa уровень модели был значительно расширен, введя ряд предварительно созданных классов для обеспечения функциональности, общей для настольных приложений.

В Mac OS X 10.3 Apple представила семейство классов NSController, которые обеспечивают предопределенное поведение для уровня контроллера. Эти классы считаются частью системы Cocoa Bindings, которая также широко использует такие протоколы, как наблюдение за значением ключа и привязка значения ключа. Термин «привязка» относится к отношениям между двумя объектами, часто между представлением и контроллером. Привязки позволяют разработчику больше сосредоточиться на декларативных отношениях, а не на организации детального поведения.

С выходом Mac OS X 10.4 Apple еще больше расширила эту основу, представив платформу Core Data , которая стандартизирует отслеживание и сохранение изменений на уровне модели. По сути, платформа значительно упрощает процесс внесения изменений в данные приложения, отмены изменений при необходимости, сохранения данных на диск и их обратного чтения.

Обеспечивая поддержку инфраструктуры для всех трех доменов MVC, цель Apple состоит в том, чтобы уменьшить количество шаблонного или «связующего» кода, который приходится писать разработчикам, высвобождая ресурсы, которые можно потратить на функции, специфичные для приложения.

Позднее связывание

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

В Objective-C методы представлены селектором — строкой , описывающей вызываемый метод. При отправке сообщения селектор отправляется в среду выполнения Objective-C, сопоставляется со списком доступных методов и вызывается реализация метода. Поскольку селектор представляет собой текстовые данные, его можно сохранять в файл, передавать по сети или между процессами или манипулировать другими способами. Реализация метода просматривается во время выполнения, а не во время компиляции. Это приводит к небольшому снижению производительности [5] , но позднее связывание позволяет одному и тому же селектору ссылаться на разные реализации.

Аналогичным образом, Cocoa предоставляет широко распространенный метод манипулирования данными, называемый кодированием ключ-значение (KVC). [6] Это позволяет искать или изменять часть данных или свойств объекта во время выполнения по имени. Имя свойства действует как ключ к значению. В традиционных языках такое позднее связывание невозможно. KVC обеспечивает большую гибкость конструкции. Тип объекта не обязательно должен быть известен, однако любое свойство этого объекта можно обнаружить с помощью KVC. Кроме того, расширяя эту систему с использованием того, что Cocoa называет наблюдением значения ключа (KVO), обеспечивается автоматическая поддержка отмены-повтора .

Поздняя статическая привязка — это вариант привязки, промежуточный между статической и динамической привязкой. Привязка имен до запуска программы называется статической ( ранней ); привязки, выполняемые во время работы программы, являются динамическими ( поздними или виртуальными ).

Богатые объекты

Одной из наиболее полезных особенностей Cocoa являются мощные базовые объекты, предоставляемые системой. В качестве примера рассмотрим базовые классы NSStringи NSAttributedString, которые предоставляют строки Unicode , и систему в AppKit, которая позволяет программисту размещать строковые объекты в графическом интерфейсе.NSText

NSTextи связанные с ним классы используются для отображения и редактирования строк. Коллекция задействованных объектов позволяет приложению реализовать что угодно: от простого однострочного поля ввода текста до полной многостраничной схемы макета текста с несколькими столбцами, с полными профессиональными типографскими функциями, такими как кернинг , лигатуры , обтекание текста произвольными формами . , вращение , полная поддержка Unicode и рендеринг глифов со сглаживанием . Макетом абзаца можно управлять автоматически или пользователем с помощью встроенного объекта « линейка », который можно прикрепить к любому текстовому представлению. Проверка орфографии происходит автоматически с использованием общесистемного набора языковых словарей. Встроена неограниченная поддержка отмены/повтора. Используя только встроенные функции, можно написать приложение текстового редактора всего за 10 строк кода. С новыми объектами контроллера это значение может упасть до нуля. Когда необходимы расширения, использование Cocoa Objective-C упрощает эту задачу. Objective-C включает концепцию «категорий», которая позволяет изменять существующий класс «на месте». Функциональность может быть реализована в категории без каких-либо изменений исходных классов в структуре или даже без доступа к ее исходному коду. В других распространенных языках та же задача требует создания нового подкласса, поддерживающего добавленные функции, а затем замены всех экземпляров исходного класса экземплярами нового подкласса.

Реализации и привязки

Фреймворки Cocoa написаны на Objective-C . Привязки Java для фреймворков Cocoa (называемые мостом Java ) также были доступны с целью замены Objective-C более популярным языком [7] , но эти привязки были непопулярны среди разработчиков Cocoa, и семантика передачи сообщений Cocoa не очень хорошо транслировалась на статически типизированный язык, такой как Java. [8] Потребность Cocoa в привязке во время выполнения означает, что многие ключевые функции Cocoa недоступны в Java. В 2005 году Apple объявила, что мост Java устарел, а это означает, что функции, добавленные в Cocoa в версиях macOS позже 10.4, не будут добавлены в программный интерфейс Cocoa-Java.

На Всемирной конференции разработчиков Apple (WWDC) 2014 компания Apple представила новый язык программирования под названием Swift , который призван заменить Objective-C. [9]

AppleScriptObjC

Первоначально AppleScript Studio можно было использовать для разработки более простых приложений Cocoa. [10] Однако, начиная с Snow Leopard, он устарел. Его заменил AppleScriptObjC, который позволяет программировать на AppleScript с использованием фреймворков Cocoa. [11]

Другие привязки

Доступ к среде программирования Cocoa можно получить с помощью других инструментов с помощью механизмов моста, таких как PasCocoa , PyObjC , CamelBones , RubyCocoa и D /Objective-C Bridge.

Сторонние привязки, доступные для других языков, включают AppleScript , Clozure CL , Monobjc и NObjective ( C# ), Cocoa# (CLI), Cocodao и D /Objective-C Bridge, [12] [13] LispWorks , Object Pascal , CamelBones ( Perl) . ), PyObjC ( Python ), FPC PasCocoa ( Lazarus и Free Pascal ), RubyCocoa ( Ruby ). [14]

Реализация языка Ruby под названием MacRuby , которая устраняет необходимость в мостовом механизме, ранее была разработана Apple, а Nu — это Lisp -подобный язык, который напрямую использует объектную модель Objective-C и, таким образом, может использовать платформы Cocoa без необходимости привязка.

Другие реализации

Существуют также реализации с открытым исходным кодом основных частей платформы Cocoa, такие как GNUstep и Cocotron, [15] которые позволяют разрабатывать кросс-платформенные приложения Cocoa для других операционных систем, таких как Microsoft Windows и Linux .

Смотрите также

Рекомендации

  1. ^ ab Обзор технологий Mac: платформы OS X. Разработчик.apple.com. Проверено 18 сентября 2013 г.
  2. Амит Сингх (19 июня 2006 г.). Внутреннее устройство Mac OS X: системный подход. ISBN 0-321-27854-2. Какао является важным наследием NeXT, на что указывает префикс «NS».
  3. Мардесич, Джоди (14 апреля 1997 г.). «Мрачная нота в рапсодии Apple. Некогда лояльные авторы программного обеспечения опасаются новых ОС, поскольку приближается важная конференция». Нет. Утренний финал. Сан-Хосе Меркьюри Ньюс. Архивировано из оригинала 6 марта 2016 года . Проверено 13 августа 2015 г.
  4. ^ Гибридный мир. Цилиндр.be. Проверено 18 сентября 2013 г.
  5. ^ Wikibooks - Некоторые преимущества Objective-C
  6. ^ «Руководство по программированию кодирования значений ключей» . Проверено 27 сентября 2021 г.
  7. ^ Стив Клингспорн (2003). «Написание приложений Cocoa на Java». МакТех . 19 (12).
  8. ^ «Использование Java Bridge» (PDF) . Apple Inc. Поскольку Java является строго типизированным языком, ему требуется дополнительная информация о классах и интерфейсах, которыми он манипулирует во время компиляции. Поэтому, прежде чем использовать классы Objective-C в качестве классов Java, необходимо написать и скомпилировать их описание.
  9. ^ «Совершенно секретный язык Swift от Apple вырос в результате работы по поддержке Objective-C, который теперь стремится заменить» .
  10. ^ «Руководство по программированию AppleScript Studio (не рекомендуется): об AppleScript Studio» . Apple, Inc. Проверено 20 ноября 2013 г.
  11. ^ «Примечания к выпуску AppleScriptObjC» . Apple, Inc. Проверено 20 ноября 2013 г.
  12. ^ Cocodao, мост для создания приложений Cocoa на языке D.
  13. ^ D/Objective-C Bridge, механизм привязки языка для Cocoa.
  14. ^ более обширный список реализаций
  15. ^ Cocotron, бесплатная программная реализация Cocoa.

Библиография

Внешние ссылки