Какао (API)
Разработчик(и) | Apple Инк. |
---|---|
Написано в | C , C++ , Objective-C , Swift |
Операционная система | macOS |
Тип | Программная среда |
Лицензия | Собственный с некоторыми компонентами с открытым исходным кодом [ нужна ссылка ] |
Веб-сайт | Apple Разработчик |
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 также имеет определенный уровень поддержки Интернета, включая классы NSURL и WebKit HTML- и другие, в то время как OpenStep имел лишь элементарную поддержку управляемых сетевых подключений через классы NSFileHandle и сокеты Беркли .
Набор инструментов API первоначально назывался «Yellow Box» и был переименован в Cocoa — название, которое уже было зарегистрировано в качестве товарного знака Apple. Торговая марка Apple Cocoa возникла как название приложения для создания мультимедийных проектов для детей. Название должно было напоминать «Java для детей», поскольку оно было встроено в веб-страницы. [3] Первоначальная программа «Какао» была прекращена после возвращения Стива Джобса в Apple. В то время Java была основным направлением деятельности компании, поэтому в качестве нового названия для «Желтого ящика» было использовано «Какао», поскольку, помимо использования собственного Objective-C, к нему также можно было получить доступ из Java через связующий слой. [4] Несмотря на то, что Apple прекратила поддержку моста Cocoa Java, это название сохранилось и даже использовалось для API Cocoa Touch .
Управление памятью
[ редактировать ]Одной из особенностей среды 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 реализованы как своего рода пакет , содержащий вышеупомянутые элементы в стандартных местах.
- Foundation Kit ( Foundation ), впервые появился в Enterprise Objects Framework на NeXTSTEP 3. [5] Он был разработан в рамках работы OpenStep и впоследствии стал основой для AppKit OpenStep, когда эта система была выпущена в 1994 году. В macOS Foundation основан на Core Foundation . Foundation — это универсальная объектно-ориентированная библиотека, обеспечивающая строками манипулирование и значениями, контейнеры и итерации , распределенные вычисления , циклы событий (циклы выполнения) и другие функции, которые не связаны напрямую с графическим пользовательским интерфейсом. Префикс «NS», используемый для всех классов и констант в платформе, взят из наследия Cocoa OPENSTEP, которое было совместно разработано NeXT и Sun Microsystems .
- Комплект приложений ( AppKit ) является прямым потомком исходного набора приложений NeXTSTEP. Он содержит код программ, которые можно использовать для создания графических пользовательских интерфейсов и взаимодействия с ними . AppKit построен на основе Foundation и использует тот же префикс NS .
- Core Data — это платформа сохранения объектов, включенная в Foundation и Cocoa и найденная в Cocoa.h. [1]
Ключевой частью архитектуры 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 , которая также широко использует такие протоколы, как Key-Value Observing и Key-Value Binding . Термин «привязка» относится к отношениям между двумя объектами, часто между представлением и контроллером. Привязки позволяют разработчику больше сосредоточиться на декларативных отношениях, а не на организации детального поведения.
С выходом Mac OS X 10.4 Apple еще больше расширила эту основу, представив платформу Core Data , которая стандартизирует отслеживание и сохранение изменений на уровне модели. По сути, платформа значительно упрощает процесс внесения изменений в данные приложения, отмены изменений при необходимости, сохранения данных на диск и их обратного чтения.
Обеспечивая поддержку инфраструктуры для всех трех доменов MVC, цель Apple состоит в том, чтобы уменьшить количество шаблонного или «связующего» кода, который приходится писать разработчикам, высвобождая ресурсы, которые можно потратить на функции, специфичные для приложения.
Позднее связывание
[ редактировать ]В большинстве объектно-ориентированных языков вызовы методов физически представлены указателем на код в памяти. Это ограничивает разработку приложения, поскольку обработки команд необходимы определенные классы , обычно организованные в соответствии с шаблоном цепочки ответственности . Хотя Cocoa по большей части сохраняет этот подход, позднее связывание Objective-C обеспечивает большую гибкость.
В Objective-C методы представлены селектором — строкой, описывающей вызываемый метод. При отправке сообщения селектор отправляется в среду выполнения Objective-C, сопоставляется со списком доступных методов и реализация вызывается метода. Поскольку селектор представляет собой текстовые данные, его можно сохранять в файл, передавать по сети или между процессами или манипулировать другими способами. Реализация метода просматривается во время выполнения, а не во время компиляции. За это есть небольшой штраф за производительность. [6] но позднее связывание позволяет одному и тому же селектору ссылаться на разные реализации.
Аналогичным образом, Cocoa предоставляет широко распространенный метод манипулирования данными, называемый кодированием ключ-значение (KVC). [7] Это позволяет искать или изменять часть данных или свойств объекта во время выполнения по имени. Имя свойства действует как ключ к значению. В традиционных языках такое позднее связывание невозможно. KVC обеспечивает большую гибкость конструкции. Тип объекта не обязательно должен быть известен, однако любое свойство этого объекта можно обнаружить с помощью KVC. Кроме того, расширяя эту систему с использованием того, что Cocoa называет наблюдением значения ключа автоматическая поддержка отмены и повтора (KVO), обеспечивается .
Поздняя статическая привязка — это вариант привязки, промежуточный между статической и динамической привязкой. Привязка имен до запуска программы называется статической ( ранней ); привязки, выполняемые во время работы программы, являются динамическими ( поздними или виртуальными ).
Богатые объекты
[ редактировать ]Одной из наиболее полезных особенностей Cocoa являются мощные базовые объекты, предоставляемые системой. В качестве примера рассмотрим базовые классы NSString
и NSAttributedString
, которые предоставляют Юникода строки , и NSText
system в AppKit, что позволяет программисту размещать строковые объекты в графическом интерфейсе.
NSText
и связанные с ним классы используются для отображения и редактирования строк. Коллекция задействованных объектов позволяет приложению реализовать что угодно: от простого однострочного поля ввода текста до полной многостраничной схемы макета текста с несколькими столбцами, с полными профессиональными типографскими функциями, такими как кернинг , лигатуры , обтекание текста произвольными формами. , вращение , полная поддержка Unicode и со сглаживанием рендеринг глифов . Макетом абзаца можно управлять автоматически или пользователем с помощью встроенного объекта « линейка », который можно прикрепить к любому текстовому представлению. Проверка орфографии происходит автоматически с использованием общесистемного набора языковых словарей. Встроена неограниченная поддержка отмены/повтора. Используя только встроенные функции, можно написать приложение текстового редактора всего за 10 строк кода. С новыми объектами контроллера это значение может упасть до нуля.Когда необходимы расширения, использование Cocoa Objective-C упрощает эту задачу. Objective-C включает концепцию « категорий », которая позволяет изменять существующий класс «на месте». Функциональность может быть реализована в категории без каких-либо изменений исходных классов в структуре или даже без доступа к ее исходному коду. В других распространенных языках та же задача требует создания нового подкласса, поддерживающего добавленные функции, а затем замены всех экземпляров исходного класса экземплярами нового подкласса.
Реализации и привязки
[ редактировать ]Фреймворки Cocoa написаны на Objective-C . Java Привязки для фреймворков Cocoa (называемые мостом Java ) также были доступны с целью замены Objective-C более популярным языком. [8] но эти привязки были непопулярны среди разработчиков Cocoa, и семантика передачи сообщений Cocoa плохо переносилась на статически типизированный язык, такой как Java. [9] Потребность Cocoa в привязке во время выполнения означает, что многие ключевые функции Cocoa недоступны в Java. В 2005 году Apple объявила, что мост Java устарел, а это означает, что функции, добавленные в Cocoa в версиях macOS позже 10.4, не будут добавлены в программный интерфейс Cocoa-Java.
На Всемирной конференции разработчиков Apple (WWDC) 2014 компания Apple представила новый язык программирования под названием Swift , который призван заменить Objective-C. [10]
AppleScriptObjC
[ редактировать ]Первоначально AppleScript Studio можно было использовать для разработки более простых приложений Cocoa. [11] Однако, что касается Snow Leopard, он устарел. Его заменил AppleScriptObjC, который позволяет программировать на AppleScript с использованием фреймворков Cocoa. [12]
Другие привязки
[ редактировать ]Доступ к среде программирования Cocoa можно получить с помощью других инструментов с помощью механизмов моста , таких как PasCocoa , PyObjC , CamelBones , RubyCocoa и D /Objective-C Bridge.
Сторонние привязки, доступные для других языков, включают AppleScript , Clozure CL , Monobjc и NObjective ( C# ), Cocoa# (CLI), Cocodao и D /Objective-C Bridge, [13] [14] LispWorks , Object Pascal , CamelBones ( Perl ), PyObjC ( Python ), FPC PasCocoa ( Lazarus и Free Pascal ), RubyCocoa ( Ruby ). [15]
Реализация языка Ruby под названием MacRuby , которая устраняет необходимость в механизме моста, ранее была разработана Apple, в то время как Nu — это Lisp -подобный язык, который напрямую использует объектную модель Objective-C и, таким образом, может использовать платформы Cocoa без необходимости привязка.
Другие реализации
[ редактировать ]Существуют также реализации с открытым исходным кодом основных частей платформы Cocoa, такие как GNUstep и Cocotron. [16] которые позволяют разрабатывать кросс-платформенные приложения Cocoa для других операционных систем, таких как Microsoft Windows и Linux .
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б Обзор технологий Mac: платформы OS X. Разработчик.apple.com. Проверено 18 сентября 2013 г.
- ^ Амит Сингх (19 июня 2006 г.). Внутреннее устройство Mac OS X: системный подход . ISBN 0-321-27854-2 .
Какао является важным наследием NeXT, на что указывает префикс «NS».
- ^ Мардесич, Джоди (14 апреля 1997 г.). «Мрачная нота в рапсодии Apple. Некогда лояльные авторы программного обеспечения опасаются новых ОС, поскольку приближается важная конференция» . Нет. Утренний финал. Сан-Хосе Меркьюри Ньюс. Архивировано из оригинала 6 марта 2016 года . Проверено 13 августа 2015 г.
- ^ Apple Inc. (10 мая 1999 г.), WWDC 1999 , получено 27 апреля 2024 г.
- ^ Гибридный мир . Цилиндр.be. Проверено 18 сентября 2013 г.
- ^ Wikibooks - Некоторые преимущества Objective-C
- ^ «Руководство по программированию кодирования значений ключа» . Проверено 27 сентября 2021 г.
- ^ Стив Клингспорн (2003). «Написание приложений Cocoa на Java» . МакТех . 19 (12).
- ^ «Использование Java Bridge» (PDF) . Apple Inc.
Поскольку Java является строго типизированным языком, ему требуется дополнительная информация о классах и интерфейсах, которыми он манипулирует во время компиляции. Поэтому, прежде чем использовать классы Objective-C в качестве классов Java, необходимо написать и скомпилировать их описание.
- ^ «Совершенно секретный язык Swift от Apple вырос в результате работы над поддержкой Objective-C, который теперь стремится заменить» .
- ^ «Руководство по программированию AppleScript Studio (не рекомендуется): об AppleScript Studio» . Apple, Inc. Проверено 20 ноября 2013 г.
- ^ «Примечания к выпуску AppleScriptObjC» . Apple, Inc. Проверено 20 ноября 2013 г.
- ^ Cocodao , мост для создания приложений Cocoa на языке D.
- ^ D/Objective-C Bridge , механизм привязки языка для Cocoa.
- ^ более обширный список реализаций
- ^ Cocotron , бесплатная программная реализация Cocoa.
Библиография
[ редактировать ]- Аарон Хиллегасс : Программирование какао для Mac OS X , Аддисон-Уэсли, 3-е издание 2008 г., мягкая обложка, ISBN 0-321-50361-9 .
- Стивен Кочан : Программирование на Objective-C , Sams, 1-е издание, 2003 г., мягкая обложка, ISBN 0-672-32586-1 .
- Майкл Бим , Джеймс Дункан Дэвидсон : Какао в двух словах , О'Рейли, 1-е издание 2003 г., мягкая обложка, ISBN 0-596-00462-1 .
- Эрик Тейковски : Программирование какао для чайников , 1-е издание, 2003 г., мягкая обложка, ISBN 0-7645-2613-8 .
- Гарфинкель, Симсон ; Махони, Майкл К. (2002). Создание приложений Cocoa: пошаговое руководство (1-е изд.). О'Рейли Медиа . CiteSeerX 10.1.1.394.3248 . ISBN 0-596-00235-1 .
- Пэрис Баттфилд-Аддисон , Джон Мэннинг : Изучение какао с помощью Objective-C , О'Рейли, 3-е издание 2012 г., мягкая обложка, ISBN 978-1-4493-1849-9 .
- Скотт Ангиш , Эрик М. Бак , Дональд А. Яктман : Программирование какао , Sams, 1-е издание 2002 г., мягкая обложка, ISBN 0-672-32230-7 .
- Эрик М. Бак , Дональд А. Яктман : Шаблоны проектирования какао , Addison-Wesley Professional, 1-е издание 2009 г., мягкая обложка, ISBN 978-0321535023
- Билл Чизмэн : Рецепты какао для Mac OS X , Peachpit Press, 1-е издание 2002 г., мягкая обложка, ISBN 0-201-87801-1 .
- Эндрю Дункан: Карманный справочник по Objective-C, O'Reilly , 1-е издание 2002 г., мягкая обложка, ISBN 0-596-00423-0 .
Внешние ссылки
[ редактировать ]- Официальный сайт [ мертвая ссылка ]
- Библиотека разработчиков Mac, Cocoa Layer , документация Apple
- iDevApps , форум программирования для Mac
- Cocoa Dev Central. Архивировано 14 ноября 2020 г. в Wayback Machine.
- Какао Дев
- Переполнение стека: какао