Отмена предварительных просмотров и миниатюр

Клиентское приложение или демон Беглого взгляда (quicklookd) может решить, что этому больше не нужны предварительный просмотр или изображение миниатюр, которое это запросило от генератора. Часто это происходит, потому что пользователь указал (например, путем закрытия окна Finder), что он или она не заинтересован перечисленными документами. Когда клиент или quicklookd решает, что этому больше не нужны миниатюра или предварительный просмотр, Беглый взгляд сообщает надлежащему генератору двумя способами, описанными в следующих разделах. Генератор должен искать эту отмену, остановить любое происходящее формирование изображения, и очистить любые ресурсы, используемые в генерации предварительного просмотра или миниатюры.

Отмена через функцию обратного вызова

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

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

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

Отмена посредством опроса

Когда клиентскому приложению больше не нужны миниатюра или предварительный просмотр, который оно запросило, оно говорит Беглый взгляд, тогда устанавливающий булев флаг для запроса (в дополнение к вызову CancelThumbnailGeneration или CancelPreviewGeneration функция обратного вызова). Генератор может получить доступ к значению этого флага в любое время путем вызова QLThumbnailRequestIsCancelled функция (для миниатюр) или QLPreviewRequestIsCancelled функция (для предварительных просмотров).

В Вашем коде генератора можно периодически вызывать эти функции для опроса Беглого взгляда относительно состояния отмены текущего запроса. Если вызов возвращает истинное значение, очистите любые ресурсы, используемые до сих пор в генерации миниатюры или предварительного просмотра и возврата noErr. Для большинства генераторов этот подход рекомендуется по подходу, описанному в Отмене Через Функцию обратного вызова.

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

Пример полезен здесь. Логика типичного генератора имеет следующую структуру в GeneratePreviewForURL функция обратного вызова:

  1. Данные документа загрузки.

  2. Данные документа синтаксического анализа.

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

  4. Сбросьте графический контекст или установите данные в ответе.

Учитывая эту структуру, вероятно, необходимо вызвать QLPreviewRequestIsCancelled между шагами 1 и 2 и снова между шагами 2 и 3. Вы не должны вызывать функцию между шагами 3 и 4, потому что Беглый взгляд отбросит предварительный просмотр при завершении шага 4 после которого Вы высвобождаете свои средства так или иначе.) Важная идея состоит в том, чтобы опросить относительно отмены мудро; Вы не должны опрашивать слишком часто, но одновременно необходимо опрашивать достаточно часто так, чтобы отмененный предварительный просмотр или миниатюра не влияли на производительность.