AVAsynchronousKeyValueLoading
AVAsynchronousKeyValueLoading
протокол определяет методы, позволяющие Вам использовать AVAsset
или AVAssetTrack
объект, не блокируя поток. «Ключ» является любым свойством в классе, реализующем этот протокол. Используя методы в протоколе, можно узнать текущий статус ключа (например, было ли соответствующее значение загружено); и спросите объект загрузить значения асинхронно, сообщив Вам, когда завершится работа.
Из-за природы синхронизированных аудиовизуальных носителей успешная инициализация актива не обязательно означает, что все его данные сразу доступны. Вместо этого актив будет ожидать для загрузки данных, пока работа не будет выполняться на нем (например, непосредственно вызывая любого релевантного AVAsset
методы, воспроизведите через AVPlayerItem
объект, использование экспорта AVAssetExportSession
, чтение использования экземпляра AVAssetReader
, и т.д.). Это означает, что несмотря на то, что можно запросить, значение любого ключа в любое время и его значение будут возвращены синхронно, вызывающий поток может быть блокирован, пока запрос не может быть удовлетворен. Чтобы избежать блокировать, Вы можете:
Во-первых, определите, является ли значение для данного ключа доступным использованием
statusOfValueForKey:error:
.Если значение еще не было загружено, Вы можете попросить загрузить одно или более значений и уведомляетесь, когда они становятся доступным использованием
loadValuesAsynchronouslyForKeys:completionHandler:
.
Даже для вариантов использования, которые могут обычно поддерживать свободный доступ к некоторым ключам (такой что касается активов, инициализированных с URLs для файлов в локальной файловой системе), замедлитесь, I/O может потребовать AVAsset
блокировать прежде, чем возвратить их значения. Несмотря на то, что блокирование может быть приемлемым в случаях, в которых Вы подготавливаете активы на фоновых потоках или в очередях работы во всех случаях, в которых нужно избежать блокирования, необходимо использовать loadValuesAsynchronouslyForKeys:completionHandler:
.
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Swift
import AVFoundation
Objective C
@import AVFoundation;
Доступность
Доступный в OS X v10.7 и позже.
-
loadValuesAsynchronouslyForKeys (_: completionHandler:) - loadValuesAsynchronouslyForKeys:completionHandler:
ТребуемыйГоворит активу загружать значения любого из уже не загружающихся указанных ключей. (требуемый)
Объявление
Swift
func loadValuesAsynchronouslyForKeys(_
keys
: [AnyObject]!, completionHandlerhandler
: (() -> Void)!)Objective C
- (void)loadValuesAsynchronouslyForKeys:(NSArray *)
keys
completionHandler:(void (^)(void))handler
Параметры
keys
Массив строк, содержащих требуемые ключи.
Ключи являются свойствами в классе, принимающем протокол.
handler
Блок, который будет вызван, когда загрузка успешно выполняется, перестал работать или отменяется.
Обсуждение
Обработчик завершения будет вызван точно один раз на вызов этого метода:
Синхронно, если ошибка I/O или другая связанная с форматом ошибка сразу происходят.
Асинхронно в последующее время, если загружающаяся ошибка происходит на более позднем этапе обработки, если
cancelLoading
вызывается наAVAsset
экземпляр, или когда значения всех указанных ключей становятся загруженными.
Состояния завершения ключей Вы указываете в
keys
не обязательно то же — некоторые могут быть загружены, и другие, возможно, перестали работать. Необходимо проверить состояние каждого ключа индивидуально.Можно вызвать этот метод в любое время, даже после того, как актив начал загружать данные для происходящих операций или уже завершенный. Каждый раз, когда любой модуль требует определенного набора значений ключа, он может вызвать этот метод и быть уверен в получении его указанного обратного вызова как можно скорее.
Блок в качестве примера показан ниже.
[asset loadValuesAsynchronouslyForKeys:[NSArray keyWithObject:@"duration"] completionHandler:^{
NSError *error = nil;
switch ([asset statusOfValueForKey:@"duration" error:&error]) {
case AVKeyValueStatusLoaded:
// duration is now known, so we can fetch it without blocking
CMTime duration = [asset duration];
// dispatch a block to the main thread that updates the display of asset duration in my user interface,
// or do something else interesting with it
default:
// something went wrong; depending on what it was, we may want to dispatch a
// block to the main thread to report th e error
}
}];
Если фатальная ошибка уже произошла, обработчик завершения вызывается синхронно.
Оператор импорта
Objective C
@import AVFoundation;
Swift
import AVFoundation
Доступность
Доступный в OS X v10.7 и позже.
См. также
-
Отчеты, доступно ли значение для данного ключа сразу без блокирования. (требуемый)
Объявление
Swift
func statusOfValueForKey(_
key
: String!, erroroutError
: NSErrorPointer) -> AVKeyValueStatusObjective C
- (AVKeyValueStatus)statusOfValueForKey:(NSString *)
key
error:(NSError **)outError
Параметры
key
Ключ, состояние которого Вы хотите. Посмотрите AVKeyValueStatus для определенных ключей.
outError
Если состояние значения для
key
AVKeyValueStatusFailed
, на передачи ссылкойNSError
объект, описывающий произошедший отказ.Возвращаемое значение
Текущее состояние загрузки значения для
key
. Посмотрите AVKeyValueStatus для определенных ключей.Обсуждение
Вы используете этот метод для определения доступности значения для ключа. Этот метод не заставляет актив загружать значение ключа, это еще не доступно. Для запроса значений на ключи, которые не могут уже быть загружены без блокирования использовать
loadValuesAsynchronouslyForKeys:completionHandler:
и ожидайте вызова обработчика завершения, который будет информирован о доступности.Оператор импорта
Objective C
@import AVFoundation;
Swift
import AVFoundation
Доступность
Доступный в OS X v10.7 и позже.
-
Константы, указывающие состояние загрузки свойства.
Объявление
Swift
enum AVKeyValueStatus : Int { case Unknown case Loading case Loaded case Failed case Cancelled }
Objective C
enum { AVKeyValueStatusUnknown, AVKeyValueStatusLoading, AVKeyValueStatusLoaded, AVKeyValueStatusFailed, AVKeyValueStatusCancelled }; typedef NSInteger AVKeyValueStatus;
Константы
-
Unknown
AVKeyValueStatusUnknown
Указывает, что состояние свойства неизвестно.
Доступный в OS X v10.7 и позже.
-
Loading
AVKeyValueStatusLoading
Указывает, что не полностью загружается свойство.
Доступный в OS X v10.7 и позже.
-
Loaded
AVKeyValueStatusLoaded
Указывает, что свойство готово к употреблению.
Доступный в OS X v10.7 и позже.
-
Failed
AVKeyValueStatusFailed
Указывает что попытка загрузить отказавшее свойство.
Доступный в OS X v10.7 и позже.
-
Cancelled
AVKeyValueStatusCancelled
Указывает, что была отменена попытка загрузить свойство.
Доступный в OS X v10.7 и позже.
Обсуждение
См. также
statusOfValueForKey:error:
.Оператор импорта
Objective C
@import AVFoundation;
Swift
import AVFoundation
Доступность
Доступный в OS X v10.7 и позже.
-