Мое приложение загружает и отображает GIF из Интернета в UIImageView сек. GIF вообще не нужно кэшировать / сохранять. Однако приложение занимает много места на iPhone, а документы и данные огромны.

Я хотел бы иметь возможность очищать папку «Документы и данные» каждый раз, когда пользователь открывает приложение. Возможно ли это сделать с Swift?

1
Johnny D 2 Авг 2017 в 06:41
Если вы говорите о папке внутри изолированной папки приложения, ответ - да.
 – 
El Tomato
2 Авг 2017 в 06:46
Вы храните загруженные файлы GIF где-нибудь в каталоге телефонов?
 – 
Karthick Selvaraj
2 Авг 2017 в 06:47
Я говорю о том, что когда вы заходите в «Настройки» на iPhone, затем нажимаете «Хранилище», а затем нажимаете «Имя приложения», там написано «Документы и данные» с сотнями мегабайт. Как мне это очистить?
 – 
Johnny D
2 Авг 2017 в 06:47
Я загружаю файлы GIF с помощью этого расширения
 – 
Johnny D
2 Авг 2017 в 07:04
Вы не должны использовать это для загрузки файлов из Интернета (см. Важный текст здесь) developer.apple.com/documentation/foundation/nsdata/…
 – 
Pochi
2 Авг 2017 в 07:52

1 ответ

Лучший ответ

В используемом вами расширении используется следующий код:

Data(contentsOf: url)

https://developer.apple.com/documentation/foundation/nsdata/1413892-init

Этот метод будет кэшировать данные в системном кеше.

Если вы хотите продолжать использовать это расширение, вам следует изменить этот код, чтобы использовать его вместо этого:

init(contentsOf:options:)

https://developer.apple.com/documentation/foundation/nsdata/1407864-init

И передайте "uncached" как вариант, чтобы избежать кеширования.

https://developer.apple.com/documentation/foundation/nsdata.readingoptions/1412417-uncached

Однако я думаю, что расширение написано плохо, например, вы должны использовать этот метод только для загрузки КОРОТКИХ локальных файлов, для больших файлов необходим поток, для сетевых запросов вы вообще не должны его использовать.

Важный

Не используйте этот синхронный метод для запроса сетевых URL-адресов. Для сетевых URL-адресов этот метод может заблокировать текущий поток на десятки секунд в медленной сети, что приведет к неудовлетворительному взаимодействию с пользователем, а в iOS может привести к завершению работы вашего приложения. Вместо этого для URL-адресов, не являющихся файлами, рассмотрите возможность использования метода dataTask (with: completionHandler :) класса NSURLSession. См. Подробности в Руководстве по программированию сеанса URL.


Data(contentsOf: url, options: .uncached)
2
Pochi 2 Авг 2017 в 08:50
Data.init(contentsOf: url, options: .uncached) по-прежнему приводит к большой емкости для хранения документов и данных
 – 
Johnny D
2 Авг 2017 в 08:51
Вы однажды удалили и переустановили приложение? или вы имеете в виду, что вы ожидаете, что ваше текущее приложение будет очищено от кешированного материала?
 – 
Pochi
2 Авг 2017 в 08:55