Понятия области монтажа

На OS X много операций поддерживаются серверным процессом области монтажа. Самой очевидной является копия и вставка, однако перетаскивая, и операции Services также установлены с помощью областей монтажа. В Какао Вы получаете доступ к серверу области монтажа через NSPasteboard объект. Эта статья описывает, как работает процесс области монтажа.

Что такое область монтажа?

Область монтажа является стандартизированным механизмом для обмена данными в приложении или между приложениями. Самое знакомое использование для областей монтажа обрабатывает копию и операции вставки:

Возможно, менее очевидно, операции Find также поддерживаются областями монтажа, как перетаскивают и операции Services:

Поскольку они могут использоваться для передачи данных между приложениями, области монтажа существуют в специальной области глобальной памяти, отдельной от порядка подачи заявки — это описано более подробно в Сервере Области монтажа. Эта подробность реализации, тем не менее, абстрагирована далеко NSPasteboard класс и его методы. Все, что необходимо сделать, взаимодействуют с объектом области монтажа.

Основные задачи, которые Вы хотите выполнить, независимо от работы, к (a), данные записи к области монтажа и (b) считывают данные из области монтажа. Эти задачи концептуально очень просты, но маска много важных подробных данных. На практике основная базовая проблема, добавляющая сложность, - то, что может быть много способов представлять данные — это приводит поочередно к соображениям эффективности. Кроме того, с точки зрения системы, существуют дополнительные проблемы для рассмотрения. Они обсуждены в следующих разделах.

Названные области монтажа

Области монтажа могут быть общедоступными или частными, и могут использоваться для множества целей. Существует несколько стандартных областей монтажа, предусмотрел четко определенные операции в масштабе всей системы:

Обычно Вы используете одну из определенных с помощью системы областей монтажа, но если необходимый можно создать собственную область монтажа для обменов, выходящих за пределы предопределенного использования набора pasteboardWithName: Если Вы вызываете pasteboardWithUniqueName, сервер области монтажа предоставит Вам уникально названную область монтажа.

Элементы области монтажа

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

Представления и UTIs

Операции области монтажа часто выполняются между двумя различными приложениями. Никакое приложение не имеет знание о другой и виды данных, которые каждый может обработать. Для максимизации потенциала для совместного использования область монтажа может содержать многократные представления того же элемента области монтажа. Например, визуальный редактор мог бы обеспечить RTFD, RTF, и NSString представления скопированных данных. Элемент, добавляющийся к области монтажа, указывает, какие представления он в состоянии обеспечить.

Каждое представление элемента идентифицируется различным Unique Type Identifier (UTI). (UTI является просто строкой, однозначно определяющей определенный тип данных. Для получения дополнительной информации см. Универсальный Обзор Идентификаторов типов.) UTI обеспечивает общие средние значения для идентификации для идентификации типов данных.

Например, предположите, что приложение поддерживало выбор обогащенного текста и изображений. Это может хотеть поместить в область монтажа и обогащенный текст и версии Unicode текстового выбора и различные представления выбора изображения. Каждое представление каждого элемента сохранено его собственными данными, как показано на рисунке 1. Можно объявить, что собственный UTIs поддерживает собственные типы данных.

  Элементы Области монтажа рисунка 1 и представления
Pasteboard items and data flavors

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

Читатель области монтажа должен найти тип данных что лучшие иски его возможности (если таковые имеются). Как правило, это означает выбирать самый богатый доступный тип. В предыдущем примере визуальный редактор мог бы обеспечить RTFD, RTF, и NSString представления скопированных данных. Приложение, поддерживающее обогащенный текст, но без изображений, должно получить представление RTF; приложение, только поддерживающее простой текст, должно получить NSString объект, тогда как приложение редактирования изображение не могло бы быть в состоянии использовать текст вообще.

Обещанные данные

Если элемент области монтажа поддерживает многократные представления, это обычно непрактично или время - и потребление ресурсов для помещения данных для каждого представления на область монтажа. Например, скажите, что Ваше приложение помещает изображение в область монтажа. Для максимальной совместимости для изображения могло бы быть полезно обеспечить много различных представлений, включая PNG, JPEG, TIFF, GIF, и т.д. Создание каждого из этих представлений, однако, потребовало бы времени и памяти.

Вместо того, чтобы требовать, чтобы элемент обеспечил все представления, это предлагает, область монтажа только просит первое представление в списке представлений, которые предлагает элемент. Если получатель вставки хочет различное представление, элемент может генерировать его, когда его требуют.

Можно также поместить элемент в область монтажа и указать, что одно или более представлений элемента предоставлены некоторым другим объектом. Чтобы сделать это, Вы указываете провайдера данных для определенного типа на элементе области монтажа. Провайдер данных должен соответствовать NSPasteboardItemDataProvider Protocol протокол для предоставления соответствующих данных по требованию.

Количество изменения

Количество изменения является переменной всего компьютера, постепенно увеличивающей каждый раз содержание изменений области монтажа (новый владелец объявляется). Независимое количество изменения сохраняется для каждой именованной области монтажа. Путем исследования количества изменения приложение может определить, совпадают ли текущие данные в области монтажа с данными, которые это в последний раз получило. changeCount и clearContents методы возвращают количество изменения.

Сервер области монтажа

Передаются ли данные между объектами в том же приложении или двух различных приложениях в приложении Какао, интерфейс является тем же — NSPasteboard доступы к объекту общий репозиторий, где писатели и читатели встречаются для обмена данными. Писатель, называемый владельцем области монтажа, депонирует данные по экземпляру области монтажа и шагам. Читатель тогда получает доступ к области монтажа асинхронно в некоторой неуказанной точке в будущем. К тому времени объект писателя даже может не существовать больше. Например, пользователь, возможно, закрыл исходный документ или вышел из приложения.

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

Ошибки

Кроме того, где ошибки в частности упоминаются в NSPasteboard описания метода, любая коммуникационная ошибка с сервером области монтажа повышаетNSPasteboardCommunicationException.