AVAsynchronousKeyValueLoading
Наследование
Не применимый
Соответствует
Не применимый
Оператор импорта
Swift
import AVFoundation
Objective C
@import AVFoundation;
Доступность
Доступный в iOS 4.0 и позже.
AVAsynchronousKeyValueLoading протокол определяет методы, позволяющие Вам использовать AVAsset или AVAssetTrack объект, не блокируя поток. «Ключ» является любым свойством в классе, реализующем этот протокол. Используя методы в протоколе, можно узнать текущий статус ключа (например, было ли соответствующее значение загружено); и спросите объект загрузить значения асинхронно, сообщив Вам, когда завершится работа.
Из-за природы синхронизированных аудиовизуальных носителей успешная инициализация актива не обязательно означает, что все его данные сразу доступны. Вместо этого актив будет ожидать для загрузки данных, пока работа не будет выполняться на нем (например, непосредственно вызывая любого релевантного AVAsset методы, воспроизведите через AVPlayerItem объект, использование экспорта AVAssetExportSession, чтение использования экземпляра AVAssetReader, и т.д.). Это означает, что несмотря на то, что можно запросить, значение любого ключа в любое время и его значение будут возвращены синхронно, вызывающий поток может быть блокирован, пока запрос не может быть удовлетворен. Чтобы избежать блокировать, Вы можете:
Во-первых, определите, является ли значение для данного ключа доступным использованием
statusOfValueForKey:error:.Если значение еще не было загружено, Вы можете попросить загрузить одно или более значений и уведомляетесь, когда они становятся доступным использованием
loadValuesAsynchronouslyForKeys:completionHandler:.
Даже для вариантов использования, которые могут обычно поддерживать свободный доступ к некоторым ключам (такой что касается активов, инициализированных с URLs для файлов в локальной файловой системе), замедлитесь, I/O может потребовать AVAsset блокировать прежде, чем возвратить их значения. Несмотря на то, что блокирование может быть приемлемым в случаях, в которых Вы подготавливаете активы на фоновых потоках или в очередях работы во всех случаях, в которых нужно избежать блокирования, необходимо использовать loadValuesAsynchronouslyForKeys:completionHandler:.
-
loadValuesAsynchronouslyForKeys (_: completionHandler:) - loadValuesAsynchronouslyForKeys:completionHandler:ТребуемыйГоворит активу загружать значения любого из уже не загружающихся указанных ключей. (требуемый)
Объявление
Swift
func loadValuesAsynchronouslyForKeys(_keys: [AnyObject]!, completionHandlerhandler: (() -> Void)!)Objective C
- (void)loadValuesAsynchronouslyForKeys:(NSArray *)keyscompletionHandler:(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 blockingCMTime 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 itdefault:// 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Доступность
Доступный в iOS 4.0 и позже.
См. также
-
Отчеты, доступно ли значение для данного ключа сразу без блокирования. (требуемый)
Объявление
Swift
func statusOfValueForKey(_key: String!, erroroutError: NSErrorPointer) -> AVKeyValueStatusObjective C
- (AVKeyValueStatus)statusOfValueForKey:(NSString *)keyerror:(NSError **)outErrorПараметры
keyКлюч, состояние которого Вы хотите. Посмотрите AVKeyValueStatus для определенных ключей.
outErrorЕсли состояние значения для
keyAVKeyValueStatusFailed, на передачи ссылкойNSErrorобъект, описывающий произошедший отказ.Возвращаемое значение
Текущее состояние загрузки значения для
key. Посмотрите AVKeyValueStatus для определенных ключей.Обсуждение
Вы используете этот метод для определения доступности значения для ключа. Этот метод не заставляет актив загружать значение ключа, это еще не доступно. Для запроса значений на ключи, которые не могут уже быть загружены без блокирования использовать
loadValuesAsynchronouslyForKeys:completionHandler:и ожидайте вызова обработчика завершения, который будет информирован о доступности.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в iOS 4.0 и позже.
-
Константы, указывающие состояние загрузки свойства.
Объявление
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;Константы
-
UnknownAVKeyValueStatusUnknownУказывает, что состояние свойства неизвестно.
Доступный в iOS 4.0 и позже.
-
LoadingAVKeyValueStatusLoadingУказывает, что не полностью загружается свойство.
Доступный в iOS 4.0 и позже.
-
LoadedAVKeyValueStatusLoadedУказывает, что свойство готово к употреблению.
Доступный в iOS 4.0 и позже.
-
FailedAVKeyValueStatusFailedУказывает что попытка загрузить отказавшее свойство.
Доступный в iOS 4.0 и позже.
-
CancelledAVKeyValueStatusCancelledУказывает, что была отменена попытка загрузить свойство.
Доступный в iOS 4.0 и позже.
Обсуждение
См. также
statusOfValueForKey:error:.Оператор импорта
Objective C
@import AVFoundation;Swift
import AVFoundationДоступность
Доступный в iOS 4.0 и позже.
-
