Как работает URL для файлов

Я использую Parse для загрузки моих файлов PFF для моих видео и изображений на моем сервере. Однако после того, как я получу URL-адрес файла из PFFile, загрузка займет вечность. Почему это? Означает ли использование URL-адреса файла, что вы фактически загружаете данные? Как будто PFFile был просто сетевым указателем на фактическое изображение / видео?

NSURL *fileUrl = [NSURL URLWithString:scene.file.url];
AVAsset *asset1 = [AVAsset assetWithURL:fileUrl];
AVPlayerItem *item = [[AVPlayerItem alloc] initWithAsset:asset1];
[QPlayer insertItem:item afterItem:nil];

Если это правда, сможет ли NSURLCache сохранить ЭТИ ДАННЫЕ локально без необходимости указывать переход на этот сервер по этому URL-адресу для получения ЭТИХ ДАННЫХ?

По сути, я спрашиваю, загружаю ли я это дважды - PFFILE, а затем данные, на которые указывает его содержимое? И если да, то разрешит ли NSCache мне выполнить вторую загрузку только один раз?

Спасибо! Я пытаюсь действительно получить концептуальное представление о сети.


person ian    schedule 22.12.2015    source источник


Ответы (1)


Представленный код OP выполняет только одну синхронную загрузку. Но если он получил объект scene в результате синтаксического анализа непосредственно перед этим, то есть две сетевые операции, обе необходимы, как вы указываете.

Вы можете кэшировать все, что хотите, в NSCache.

Загрузка файла, вероятно, идет медленно, потому что файл большой. И это должно быть очень медленно, потому что синхронная операция - если она выполняется в основном - блокирует пользовательский интерфейс.

person danh    schedule 22.12.2015
comment
Фактически это асинхронный блок dispatch_async (dispatch_get_global_queue (DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^ {}); извините, я не опубликовал это - person ian; 22.12.2015
comment
Итак, для второго запроса, использующего URL-адрес файла, могу ли я использовать NSURLCache и ускорять его каждый раз после первого вызова? Или это NSCache? - person ian; 22.12.2015
comment
да. Но чтобы использовать его, вам нужно сделать http-запрос самостоятельно, а не через assetWithURL. - person danh; 22.12.2015
comment
Хорошо, я реализую NSURLRequest с URL-адресом файла. Однако, когда дело доходит до использования этого кешированного объекта ответа, могу ли я не использовать тот же URL-адрес для assetWithURL? Я думал, что с cachePolicy он локально проверяет этот URL-адрес, а затем проверяет источник (в этом случае анализирует бэкэнд)? - person ian; 22.12.2015
comment
Я думаю, поскольку целью является AVAsset, вам нужно будет работать на более низком уровне, создавая кешированный файл и используя NSCache для кэширования его данных. - person danh; 22.12.2015
comment
Однако я могу создать AVAsset только с URL-адресом. Смогу ли я использовать другой URL-адрес, указывающий на мой кешированный файл? - person ian; 22.12.2015
comment
Итак, работая на более низком уровне, вы перейдете к http-запросу, который получает NSData, запишите эти данные в каталог NSCaches (сгенерировав локальный URL-адрес) и инициализируйте актив с локальным URL-адресом. Вы также можете кэшировать в памяти, используя NSCache. - person danh; 22.12.2015
comment
Подождите, я немного покопался, и я не могу понять, что вы имеете в виду, используя NSCachesDirectory против кеширования в памяти с помощью NSCache. Не могли бы вы указать мне на литературу, объясняющую разницу, или на простой ответ, если можете? - person ian; 22.12.2015
comment
Вы имеете в виду каталоги / documents vs / temp? - person ian; 22.12.2015
comment
См. Здесь (developer.apple.com/library/mac/documentation/Cocoa/Reference/), а затем NSCachesDirectory в этом перечислении для первого параметра (developer.apple.com/library/mac/documentation/Cocoa / Справка /) - person danh; 22.12.2015
comment
Вот кто-то делает почти то, что вы ищете, я думаю ... stackoverflow.com/questions/14898994/ - person danh; 22.12.2015
comment
да, я действительно использую этот код! ха-ха, я понимаю, что и почему они это делают сейчас - person ian; 22.12.2015
comment
Вы можете подумать о том, чтобы начать без NSCache. Файловая система должна быть довольно быстрой .... если файл существует, используйте его, в противном случае создайте его с помощью запроса nsurl, а затем используйте его. - person danh; 22.12.2015
comment
Хорошо. этот метод работает хорошо. Но сейчас мое видео замирает - person ian; 22.12.2015