Понятия области монтажа
На OS X много операций поддерживаются серверным процессом области монтажа. Самой очевидной является копия и вставка, однако перетаскивая, и операции Services также установлены с помощью областей монтажа. В Какао Вы получаете доступ к серверу области монтажа через NSPasteboard
объект. Эта статья описывает, как работает процесс области монтажа.
Что такое область монтажа?
Область монтажа является стандартизированным механизмом для обмена данными в приложении или между приложениями. Самое знакомое использование для областей монтажа обрабатывает копию и операции вставки:
Когда пользователь выбирает данные в приложении и выбирает Copy (или Cut) пункт меню, выбранные данные помещаются на область монтажа.
Когда пользователь выбирает пункт меню Paste (или в том же или в различном приложении), данные по области монтажа копируются в текущее приложение.
Возможно, менее очевидно, операции Find также поддерживаются областями монтажа, как перетаскивают и операции Services:
Когда пользователь начинает перетаскивание, данные перетаскивания добавляются к области монтажа. Если концы перетаскивания с действием отбрасывания, приложение получения получает данные перетаскивания от области монтажа.
Если услуги по переводу требуют, запрашивающее приложение помещает данные, которые будут переведены на область монтажа. Служба получает эти данные, выполняет перевод и помещает переведенные данные назад на область монтажа.
Поскольку они могут использоваться для передачи данных между приложениями, области монтажа существуют в специальной области глобальной памяти, отдельной от порядка подачи заявки — это описано более подробно в Сервере Области монтажа. Эта подробность реализации, тем не менее, абстрагирована далеко NSPasteboard
класс и его методы. Все, что необходимо сделать, взаимодействуют с объектом области монтажа.
Основные задачи, которые Вы хотите выполнить, независимо от работы, к (a), данные записи к области монтажа и (b) считывают данные из области монтажа. Эти задачи концептуально очень просты, но маска много важных подробных данных. На практике основная базовая проблема, добавляющая сложность, - то, что может быть много способов представлять данные — это приводит поочередно к соображениям эффективности. Кроме того, с точки зрения системы, существуют дополнительные проблемы для рассмотрения. Они обсуждены в следующих разделах.
Названные области монтажа
Области монтажа могут быть общедоступными или частными, и могут использоваться для множества целей. Существует несколько стандартных областей монтажа, предусмотрел четко определенные операции в масштабе всей системы:
NSGeneralPboard
— для сокращения, копии и вставкиNSRulerPboard
— для копии и вставки линеекNSFontPboard
— для сокращения, копии и вставкиNSFont
объектыNSFindPboard
— специализированные панели находки могут совместно использовать искавший текстовое значениеNSDragPboard
— для графических операций перетаскивания
Обычно Вы используете одну из определенных с помощью системы областей монтажа, но если необходимый можно создать собственную область монтажа для обменов, выходящих за пределы предопределенного использования набора pasteboardWithName:
Если Вы вызываете pasteboardWithUniqueName
, сервер области монтажа предоставит Вам уникально названную область монтажа.
Элементы области монтажа
Каждую часть данных, помещенных на область монтажа, считают элементом области монтажа. Область монтажа может содержать многократные элементы. Приложения могут поместить или получить столько элементов, сколько они желают. Например, скажите, что пользовательский выбор в окне браузера содержит и текст и изображение. Область монтажа позволяет Вам скопировать текст и изображение к области монтажа как отдельные элементы. Приложение, вставляющее многократные элементы, может принять решение взять только тех, который является поддержками (текст, но не изображение, например).
Представления и UTIs
Операции области монтажа часто выполняются между двумя различными приложениями. Никакое приложение не имеет знание о другой и виды данных, которые каждый может обработать. Для максимизации потенциала для совместного использования область монтажа может содержать многократные представления того же элемента области монтажа. Например, визуальный редактор мог бы обеспечить RTFD, RTF, и NSString
представления скопированных данных. Элемент, добавляющийся к области монтажа, указывает, какие представления он в состоянии обеспечить.
Каждое представление элемента идентифицируется различным Unique Type Identifier (UTI). (UTI является просто строкой, однозначно определяющей определенный тип данных. Для получения дополнительной информации см. Универсальный Обзор Идентификаторов типов.) UTI обеспечивает общие средние значения для идентификации для идентификации типов данных.
Например, предположите, что приложение поддерживало выбор обогащенного текста и изображений. Это может хотеть поместить в область монтажа и обогащенный текст и версии Unicode текстового выбора и различные представления выбора изображения. Каждое представление каждого элемента сохранено его собственными данными, как показано на рисунке 1. Можно объявить, что собственный UTIs поддерживает собственные типы данных.
В целом, для максимизации потенциала для совместного использования элементы области монтажа должны обеспечить как можно больше различных представлений (см. Пользовательские Данные). Теоретически это может привести к проблемам относительно эффективности, на практике, однако, они смягчены по тому, как элементы обеспечивают, различные представления — видят Обещанные Данные.
Читатель области монтажа должен найти тип данных что лучшие иски его возможности (если таковые имеются). Как правило, это означает выбирать самый богатый доступный тип. В предыдущем примере визуальный редактор мог бы обеспечить RTFD, RTF, и NSString
представления скопированных данных. Приложение, поддерживающее обогащенный текст, но без изображений, должно получить представление RTF; приложение, только поддерживающее простой текст, должно получить NSString
объект, тогда как приложение редактирования изображение не могло бы быть в состоянии использовать текст вообще.
Обещанные данные
Если элемент области монтажа поддерживает многократные представления, это обычно непрактично или время - и потребление ресурсов для помещения данных для каждого представления на область монтажа. Например, скажите, что Ваше приложение помещает изображение в область монтажа. Для максимальной совместимости для изображения могло бы быть полезно обеспечить много различных представлений, включая PNG, JPEG, TIFF, GIF, и т.д. Создание каждого из этих представлений, однако, потребовало бы времени и памяти.
Вместо того, чтобы требовать, чтобы элемент обеспечил все представления, это предлагает, область монтажа только просит первое представление в списке представлений, которые предлагает элемент. Если получатель вставки хочет различное представление, элемент может генерировать его, когда его требуют.
Можно также поместить элемент в область монтажа и указать, что одно или более представлений элемента предоставлены некоторым другим объектом. Чтобы сделать это, Вы указываете провайдера данных для определенного типа на элементе области монтажа. Провайдер данных должен соответствовать NSPasteboardItemDataProvider Protocol
протокол для предоставления соответствующих данных по требованию.
Количество изменения
Количество изменения является переменной всего компьютера, постепенно увеличивающей каждый раз содержание изменений области монтажа (новый владелец объявляется). Независимое количество изменения сохраняется для каждой именованной области монтажа. Путем исследования количества изменения приложение может определить, совпадают ли текущие данные в области монтажа с данными, которые это в последний раз получило. changeCount
и clearContents
методы возвращают количество изменения.
Сервер области монтажа
Передаются ли данные между объектами в том же приложении или двух различных приложениях в приложении Какао, интерфейс является тем же — NSPasteboard
доступы к объекту общий репозиторий, где писатели и читатели встречаются для обмена данными. Писатель, называемый владельцем области монтажа, депонирует данные по экземпляру области монтажа и шагам. Читатель тогда получает доступ к области монтажа асинхронно в некоторой неуказанной точке в будущем. К тому времени объект писателя даже может не существовать больше. Например, пользователь, возможно, закрыл исходный документ или вышел из приложения.
Следовательно, когда движущиеся данные между двумя различными приложениями, и поэтому два различных адресных пространства, третье пространство памяти принимает участие так, данные сохраняются даже в отсутствие источника. NSPasteboard
обеспечивает доступ к третьему адресному пространству — серверный процесс области монтажа (pbs
) — который всегда работает в фоновом режиме. Сервер области монтажа поддерживает произвольное число отдельных областей монтажа для различения среди нескольких параллельной передачи данных.
Ошибки
Кроме того, где ошибки в частности упоминаются в NSPasteboard
описания метода, любая коммуникационная ошибка с сервером области монтажа повышаетNSPasteboardCommunicationException
.