UIWebView не сразу останавливается

Я пробовал все эти ( один , два , три , четыре ) решения, но после того, как я вернулся с экрана веб-просмотра на предыдущий viewController, он зависает примерно на 2 секунды (иногда больше). В viewWillAppear нет ничего, что вызовет замораживание.

Здесь viewWillDisappear контроллера веб-представления:

 -(void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [detailWebView stopLoading]; detailWebView.delegate = nil; NSLog(@"viewWillDisappear called !!!"); } 

Первый viewController:

 -(void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController.navigationBar setBarTintColor:[UIColor colorWithRed:41.0/255.0 green:151.0/255.0 blue:132.0/255.0 alpha:1.0]]; UIImage *imagePlus = [[UIImage imageNamed:@"create.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; buttonCreate = [UIButton buttonWithType:UIButtonTypeCustom]; [buttonCreate setImage:imagePlus forState:UIControlStateNormal]; [buttonCreate addTarget:self action:@selector(createActivity:) forControlEvents:UIControlEventTouchUpInside]; buttonCreate.frame = CGRectMake(self.view.frame.size.width - 40, 10, 16, 16); [self.navigationController.navigationBar addSubview:buttonCreate]; UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"back", nil) style:UIBarButtonItemStylePlain target:nil action:nil]; [backButton setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor blackColor]} forState:UIControlStateNormal]; self.navigationItem.backBarButtonItem = backButton; [self.navigationController.navigationBar setTintColor:[UIColor blackColor]]; } 

Обновление : я только что подтвердил, что если я полностью загружу webView, а затем перейду к предыдущему диспетчеру просмотра, не будет наблюдаться замедление.

Я делаю следующее, что похоже на то, что предлагает @Mrunal, но загружает действительную страницу. Я первоначально добавил это, чтобы иметь дело с ситуацией, когда загруженная страница имела таймеры, которые продолжали работать навсегда после выхода из UIWebView. Для меня это хорошо работает.

 - (void) viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; // Load a blank page as found things hang around. [self.theWebView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]]]; } 

NB Я не вызываю stopLoading как это останавливает запрос на загрузку. Может быть, это не так с решением Муннал?

Попробуйте это в viewWillDisappear :

 -(void)viewWillDisappear:(BOOL)animated { [detailWebView setDelegate:nil]; [detailWebView loadRequest: [NSURLRequest requestWithURL: [NSURL URLWithString:@""]]]; [detailWebView stopLoading]; [super viewWillDisappear:animated]; } 

Вы используете NSURLProtocol для перехвата веб-запросов из вашего UIWebView? Следующий ответ написан на этом предположении.

Загрузка веб-страницы включает отправку запросов на несколько ресурсов (изображения, видео, html, javascript). Каждый из этих ресурсов имеет URL-адрес, который будет перехвачен NSURLProtocol

Теперь, если вы закроете webView перед загрузкой всех ресурсов, NSURLProtocol иногда принимает отменить все открытые запросы на ресурсы, которые он перехватывает, и в этом процессе замораживание вашего приложения.

Вы должны отменить регистрацию из NSURLProtocol, прежде чем выйти из WebView. Так

  override func viewWillDisappear{ NSURLProtocol.unregisterClass(/*your custom url protocol class name here*/) } 

должен исправить проблему замораживания

PS: Иногда у вас может быть NSURLProtocol, определенный для всего приложения, и в этом случае я думаю, что лучше выделить NSURLProtocol для UIwebView из остальной части приложения. Я не знаю много о вашем проекте, чтобы я мог прокомментировать, если это возможный вариант для вас

Я думаю, что веб-просмотр может все еще обрабатываться в фоновом режиме. И я убедился, что совершенно неудобно выпускать UIWebView полностью. Возможно, вам захочется взглянуть в Профилировщик: вверх и закрыть ViewController веб-просмотра несколько раз, буфер должен неуклонно увеличиваться.

Вот почему я придумал, чтобы объединить несколько подходов решения от переполнения стека, чтобы окончательно и полностью удалить все хранилище из веб-представления, а также не остановить его.

Крайне важно, чтобы веб-просмотр был равен нулю, чтобы действительно освободить память, в прежние времена у нас был метод выпуска, который теперь «устарел», если вы правильно используете ARC.

 - (void)releaseWebView:(UIWebView *)webView { /* There are several theories and rumors about UIWebView memory leaks, and how to properly handle cleaning a UIWebView instance up before deallocation. This method implements several of those recommendations. #1: Various developers believe UIWebView may not properly throw away child objects & views without forcing the UIWebView to load empty content before dealloc. Source: http://stackoverflow.com/questions/648396/does-uiwebview-leak-memory */ [webView loadHTMLString:@"" baseURL:nil]; /* #2: Others claim that UIWebView's will leak if they are loading content during dealloc. Source: http://stackoverflow.com/questions/6124020/uiwebview-leaking */ [webView stopLoading]; /* #3: Apple recommends setting the delegate to nil before deallocation: "Important: Before releasing an instance of UIWebView for which you have set a delegate, you must first set the UIWebView delegate property to nil before disposing of the UIWebView instance. This can be done, for example, in the dealloc method where you dispose of the UIWebView." Source: UIWebViewDelegate class reference */ [webView setDelegate:nil]; /* #4: If you're creating multiple child views for any given view, and you're trying to deallocate an old child, that child is pointed to by the parent view, and won't actually deallocate until that parent view dissapears. This call below ensures that you are not creating many child views that will hang around until the parent view is deallocated. */ [webView removeFromSuperview]; webView = nil; } 

Пожалуйста, попробуйте и вызовите этот метод в viewWillDisappear:

  • UIWebView позволяет использовать свойствоInlineMediaPlayback для 4.2 на iPad
  • ios8 iPad uiwebview падает при отображении popover, когда пользователь отбирает поле ввода HTML5 с типом даты
  • Простой богатый текстовый вид в какао-touch
  • Изменение масштабирования и содержимогоОбъект UIScrollView в UIApplicationStateBackground state
  • iOS 8.0 Вход в файл UIWebView разбивает мое приложение
  • Обнаруживать длительное нажатие на UIWebview и всплывать меню, если я нажимаю на ссылку
  • UIView Animation сбрасывает вид на исходный прямоугольник
  • Проведите пальцем по спине / вперед в UIWebView?
  • iOS - проблемы с canGoForward и canGoBack в webViewDidStartLoad
  • Сделайте анимацию Flip (или что-то подобное), когда я перезагружаю содержимое своего UIWebView
  • Загрузите собственный https-url с помощью UIWebview и NSURLSession
  • Interesting Posts

    Загрузка файла nib внутри UIViewController

    Использование SSkeychain для хранения токенов доступа

    Кордоба inappbrowser подходит изображение на экране (ios)

    Как узнать, изменилась ли SIM-карта пользователя iPhone?

    Приложение Orcale MAF iOS отклонено Apple – сетевая совместимость с IPV6

    Есть ли способ отключить вспышку / мигание на iPad / iPhone при запуске onclick?

    Twilio iOS SDK не работает с «400 Bad request» при исходящем вызове

    Посоветуйте, как реализовать слайд-шоу изображений / карусель? (iOS)

    Сравнение двух перечислений для всех возможных случаев

    Сертификат / ключи распространения AppStore на смарт-карте?

    Проблема AFNetworking с ответом: неавторизованный (401)

    Результаты поиска NSString из загрузки URL

    Как играть в AVSpeechSynthesizer через динамик приемника вызовов?

    iOS: как выполнить этот код делегата с использованием блока

    Удалить пробел из номера контакта, полученного из телефонной книги

    Давайте будем гением компьютера.