【问题标题】:iOS UIWebView leakediOS UIWebView 泄露
【发布时间】:2015-12-17 18:00:53
【问题描述】:
class MyViewController: UIViewController {
     @IBOutlet weak var webView: UIWebView?
     override func viewDidLoad() {
    super.viewDidLoad()

    let url = NSURL(string: urlString)
    let request = NSURLRequest(URL: url!)
    SVProgressHUD.show()

    webView?.loadRequest(request)
    webView?.scrollView.header = MJRefreshNormalHeader(refreshingBlock: {

      [weak self] in
      if let strongSelf = self {
        strongSelf.webView?.reload()
      }})   }
     override func viewDidDisappear(animated: Bool) {
    super.viewDidDisappear(animated) 

    SVProgressHUD.dismiss()   }    }

extension MyViewController: UIWebViewDelegate {
     func webViewDidFinishLoad(webView: UIWebView) {
    webView.scrollView.header.endRefreshing()
    SVProgressHUD.dismiss()   }       func webView(webView: UIWebView, didFailLoadWithError error: NSError?) {
    webView.scrollView.header.endRefreshing()
    SVProgressHUD.dismiss()   }    }

视图控制器是由导航控制器推送的,当我弹出它时,我得到了泄漏。在 instrument.Leak 我看到了这些。

#

Leaked Object   #   Address Size    Responsible Library Responsible Frame NSMutableArray    1   0x137a6ddb0 48 Bytes    UIKit   -[_UIKeyboardTextSelectionGestureController init]
_UIKeyboardTextSelectionController  1   0x137a6e800 96 Bytes    UIKit   -[UIWebSelectionAssistant addNonEditableForceTextSelectionGestureRecognizersToView:]
_UIKeyboardBasedNonEditableTextSelectionGestureController   1   0x137a6dcd0 160 Bytes   UIKit   -[UIWebSelectionAssistant addNonEditableForceTextSelectionGestureRecognizersToView:]

#

我确定webView,myViewController被延迟了,但是当myViewController弹出时,4M增加了,没有释放。请帮忙,谢谢。

列表项

【问题讨论】:

  • 我试图格式化你的代码但是太费力了,请自己做
  • 有什么更新吗?我认为这个问题只发生在 iOS9 中,而不发生在 iOS8 中。
  • 我第三期这个问题。我最近嵌入了一个 UIWebView,它开始报告相同占用空间的内存泄漏。
  • 我在使用 Xcode 7、iOS9 的应用程序中也遇到了同样的泄漏,我曾经在哪里使用 UIWebView。这是特定于 UIWebView 的吗?也许是一个 Apple Bug。不知道如何处理。
  • 也遇到了同样的问题。有没有人碰巧解决了?

标签: ios webview uiwebview


【解决方案1】:

根据an answer posted here,有一个解决方法,如果您将configuration.selectionGranularity 设置为WKSelectionGranularityCharacter,泄漏就会停止:

let config = WKWebViewConfiguration()
config.selectionGranularity = .character //WKSelectionGranularityCharacter
let myWebview = WKWebview(frame: frame, configuration: config)

This worked for me, but then, when selecting text, there was no selection rectangle in the webview.在您的情况下,这可能是也可能不是可行的解决方法。

编辑 我刚刚注意到您的问题是针对 UIWebView,而不是 WKWebView。看起来你不能在 UIWebView 上设置它。我现在将留下这个答案,因为 WKWebView 谷歌搜索这个内存泄漏的人可能会找到这个线程......

【讨论】:

  • 不幸的是,这并不能解决 WKWebView 的问题... :(
  • 也许还有更多的因素?我写这篇文章的时候确实如此,对其他人来说似乎也是如此,即使是现在——尽管我没有在较新的 iOS 版本中重新测试。
猜你喜欢
  • 1970-01-01
  • 2011-05-02
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-10
  • 2012-06-02
  • 1970-01-01
  • 2023-04-07
相关资源
最近更新 更多