Обзор реализации генератора

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

Эта глава суммирует только генерацию миниатюр и предварительных просмотров. Посмотрите Предварительные просмотры Отмены и Миниатюры для обсуждения того, как отменить генерацию миниатюр и предварительных просмотров.

Генератор беглого взгляда API

Заголовочный файл QLGenerator.h в Беглом взгляде платформа объявляет программируемый интерфейс для генераторов Беглого взгляда. (Другой заголовочный файл, QLBase.h, находится также в Headers папка, но этот файл просто содержит определения различных макросов, используемых и Беглым взглядом открытые и закрытые интерфейсы.) Программируемый интерфейс для генераторов разделен между запросами миниатюры и запросами предварительного просмотра, представленными непрозрачными типами QLThumbnailRequestRef и QLPreviewRequestRef, соответственно. API попадает в три отличных категории:

Важное различие для учета, когда программирование генераторов является различием между опциями и свойствами. Оба - имена CFDictionaryRef параметры в функциях Беглого взгляда. Но параметр опций в функциях обратного вызова GenerateThumbnailForURL и GeneratePreviewForURL словарь опций или подсказки, от клиента к генератору для того, как должен быть обработан запрос. Параметр свойств является последним параметром в QLThumbnailRequest и QLPreviewRequest функции, используемые для создания миниатюр и предварительных просмотров; properties словарь содержит данные, дополнительные к создаваемой миниатюре или предварительному просмотру.

Подходы к генерации миниатюры и предварительного просмотра

Подход, который Вы проявляете к миниатюре и генерации предварительного просмотра и функциям Беглого взгляда, которые Вы используете, зависите от вида документа свой генератор, предназначается для. Задайте себе эти вопросы о документе:

Конечно, ли запрос для миниатюры, или предварительный просмотр вводит в Ваш выбор подхода. Если запрос для миниатюры с размером, не больше, чем регулярный значок документа, то миниатюра в том размере может быть не лучше, чем значок. Если запрос для предварительного просмотра многостраничного документа, Вы показываете просто первую страницу документа или всего этого? Является ли запрос для миниатюры или предварительного просмотра, производительность Вашего генератора первостепенной важности. Например, когда клиент запрашивает миниатюры, это может запросить их на десятки различных документов; неэффективные генераторы могут заставить дисплей клиента миниатюр казаться вялым. Если клиент запрашивает предварительный просмотр на документ, который составляет более чем 200 страниц, возможно необходимо включать только достаточно документа для пользователя для идентификации его. Для Вашего генератора необходимо принять надлежащие методы управления памятью и надлежащую стратегию многопоточности. Для получения дополнительной информации о многопоточных генераторах и проблемах потокобезопасности, посмотрите Генераторы и Потокобезопасность

Если Вы хотите указать статическую миниатюру и изображения предварительного просмотра для связанного документа, можно проявить самый простой подход — это даже не требует генератора. Просто имейте свое место приложения изображения в пакете документа в названной подпапке QuickLook; файл образа для миниатюр нужно назвать Thumbnail.расширение и файл для предварительных просмотров нужно назвать Preview.расширение (где расширение является расширением такой как tiff, png, или jpg). При выборе этого подхода Вы не должны создавать генератор.

Программно, можно проявить один из следующих подходов для генерации миниатюр и предварительных просмотров, в зависимости от документа и других обстоятельств:

Генераторы и потокобезопасность

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

Если можно определить ответ на эти вопросы, можно сконфигурировать генератор для оптимальной производительности путем установки QLSupportsConcurrentRequests и QLNeedsToBeRunOnMainThread свойства в Вас информационный список свойств генератора (Info.plist). (Если Вы не уверены в ответе на какой-либо из вышеупомянутых вопросов, принимаете самый консервативный ответ с точки зрения потокобезопасности.) Таблица 4-1 суммирует состояние потокобезопасности, которое Беглый взгляд принимает при присвоении различных значений этим двум свойствам.

  Свойства Table 4-1 Quick Look для указания состояния потокобезопасности генератора

Пара свойства Quick Look

Значения

Состояние потокобезопасности

QLSupportsConcurrentRequests

QLNeedsToBeRunOnMainThread

НЕТ

НЕТ

Значение по умолчанию. Код генератора не ориентирован на многопотоковое исполнение, но он использует ориентированные на многопотоковое исполнение платформы. Генератор никогда не вызывают дважды одновременно, но можно было бы вызвать на различных потоках.

QLSupportsConcurrentRequests

QLNeedsToBeRunOnMainThread

ДА

НЕТ

Код генератора ориентирован на многопотоковое исполнение и использует ориентированные на многопотоковое исполнение платформы. Беглый взгляд может вызвать генератор для нескольких документов одновременно в различных потоках, включая основной поток.

QLSupportsConcurrentRequests

QLNeedsToBeRunOnMainThread

НЕТ

ДА

Самый безопасный контекст, потому что Беглый взгляд вызывает генератор последовательно в основном потоке.

QLSupportsConcurrentRequests

QLNeedsToBeRunOnMainThread

ДА

ДА

В некоторых ситуациях демон Беглого взгляда может отделить подпроцесс для обрабатывания запросов от клиентов, таким образом, те запросы могли бы быть диспетчеризированы тому же коду генератора в двух различных процессах. Эта комбинация указывает, что генератор ориентирован на многопотоковое исполнение в том контексте.

Для получения информации о проблемах потокобезопасности, включая ориентированное на многопотоковое исполнение состояние платформ Углерода и Какао, см. Руководство по программированию Поточной обработки.