На главном экране нашего приложения (и, следовательно, первом, что видно всем пользователям) есть несколько разделов, большинство из которых содержат различные веб-просмотры, которые пользователь может открыть. Это увеличивает использование памяти с 26 до 800 МБ или даже больше (после открытия всех различных веб-просмотров).Освобождение ресурсов iOS UIWebView после использования
Проблема, которую мы обнаружили, заключается в том, что, как только они закрыты, все ресурсы веб-страниц, по-видимому, хранятся в памяти (используемая память едва уменьшает, возможно, несколько МБ).
Я хотел бы освободить ресурсы, которые должен был открыть веб-браузер, потому что в дальнейшем есть очень требовательный раздел нашего приложения, которому требуется большая часть памяти и полностью разрушает приложение, если вам случится просмотр been некоторые из этих веб-просмотров ранее.
Я нашел несколько вариантов в Интернете, но ни один из них не работал до сих пор. Такие вещи, как:
// Try to clean used webview
[self.webView loadHTMLString:@"" baseURL:nil];
[self.webView stopLoading];
self.webView.delegate = nil;
[self.webView removeFromSuperview];
self.webView = nil;
Они практически не влияют на использование памяти. Здесь что-то не хватает? Я уже проверил, что у меня нет никаких утечек, что будет держать WebView открыт, я уже освободив только ссылку на него, что у меня есть (self.webView = nil;
)
Edit: Я только что создал проект с нуля, добавил webview и кнопку, которая загружает другую сеть каждый раз, когда я нажимаю на нее, что, в свою очередь, увеличивает использование памяти. Я также добавил кнопку, которая будет уничтожать веб-просмотр при нажатии и, угадайте, что, память остается прежней, как будто она фактически не освобождает ресурсы.
Вы используете ARC? Если вы не используете ARC, вам нужно вызвать выпуск на веб-просмотре. – Ankush
@Ankush да, я благодарю anyways – h4lc0n
Возможно, я неправильно понял характер вашего вопроса, но я хотел бы предложить изменить архитектуру контроллера, чтобы иметь только один экземпляр UIWebView, это действительно тяжеловесный, но очень выразительный и автономный пользователь элемент. Вы можете добавить серверный прокси/агрегатор, который загружает все ваши виджеты в этом веб-представлении. Позже вы могли поймать события javascript и применить свою логику. – voromax