iOS UIWebView泄露

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() } } 

视图控制器被导航控制器推动,当我popup它,我得到泄漏。 在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被延迟了,但是当popupmyViewController时,4M增加了而不是释放。 请帮助和谢谢。

项目清单

根据这里发布的答案 ,有一个解决方法,如果您将configuration.selectionGranularity设置为WKSelectionGranularityCharacter ,泄漏停止:

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

这对我有用,但是当select文本时,webview中没有select矩形。 这可能或可能不是一个可行的解决方法在你的情况。

编辑我只是注意到你的问题是为UIWebView,而不是WKWebView。 它看起来不像你可以在UIWebView上设置。 我现在离开这个答案,因为WKWebView的人们googling这个内存泄漏可能会find这个线程…