2014-09-30 2 views
0

В настоящее время у меня возникла небольшая проблема с WebViews, которая не выпускает память во времени, im вызывает некоторые веб-просмотры (пользователь может открыть их, вернуться к карте (через Tabbar) и открыть новый),iOS 8 Свободная память после WebView (swift)

Каждый раз, когда WebView называется, он использует до 30 МБ ОЗУ, поэтому после 10 WebViews приложение запускается в предупреждении о памяти, поэтому я ищу способ (как я нашел в других сообщениях, нет способа почему он обрабатывается автоматически), чтобы освободить память после переключения на карту из веб-представления.

Это, как я называю мой WebView

import UIKit 

class ViewController_webView: UIViewController { 
/* ################################################## IBOutlets ################################################## */ 
    @IBOutlet weak var webView: UIWebView! 
    @IBOutlet weak var TBB_shop: UITabBarItem! 
    @IBOutlet weak var activity: UIActivityIndicatorView! 
/* ################################################## Home Button ################################################## */ 
    @IBAction func BThome(sender: AnyObject) { 

     var shopurl = "http://google.com" 
     let webviewURL = NSURL(string: shopurl) 
     let request = NSURLRequest(URL: webviewURL) 
     webView.loadRequest(request) 
    } 
/* ################################################## ViewDidLoad ################################################## */ 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     var TBB_shop_img = UIImage(named: "TabbarShopping.png") as UIImage 
     TBB_shop.selectedImage = TBB_shop_img 
    } 
/* ################################################## MemoryWarning ################################################## */ 
    override func didReceiveMemoryWarning() { 

     super.didReceiveMemoryWarning() 
     println("Memory Warning") 
    } 
/* ################################################## viewWillAppear ################################################## */ 
    override func viewWillAppear(animated: Bool) { 

     var shopurl = "http://google.com" 
     let webviewURL = NSURL(string: shopurl) 
     let request = NSURLRequest(URL: webviewURL) 
     webView.loadRequest(request) 
    } 
/* ################################################## Activity Indicator ################################################## */ 
    func webViewDidStartLoad(_ : UIWebView){activity.startAnimating()} 
    func webViewDidFinishLoad(_ : UIWebView){activity.stopAnimating()} 



} 

Есть в любом случае использовать

override func viewDidDisappear(animated: Bool) { 
     <#code#> 
    } 

освободить использование памяти WebView? Или в любом случае уменьшить использование памяти?

ответ

0

Из вашего кода я выхожу, что webView находится в наконечнике.

Чтобы уменьшить объем памяти, вы можете попробовать создать и удалить webView в viewWillAppear и viewWillDisappear соответственно.

Это означает, что вам, возможно, придется повторно загрузить контент, если пользователь должен вернуться к нему. Раздражает с точки зрения пользователя.

0

Высвобождение памяти может зависеть от того, как вы воспитываете вид - вот модальное представление контроллера представления - это не освободит память ранее загруженного контроллера представления:

let vc = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as WebViewController  
let navigationController = UINavigationController(rootViewController: vc)! 
self.presentViewController(navigationController, animated: true, completion: nil) 

Ниже случай где rootViewController заменяется новым контроллером - в этом случае значение rootViewController изменяется - поэтому исходный контроллер представления (если он был загружен до), счетчик ссылок уменьшается до 0 и должен быть удален из памяти, теоретически:

let vc = self.storyboard!.instantiateViewControllerWithIdentifier("WebViewController") as WebViewController 
let navigationController = UINavigationController(rootViewController: vc)!  
let window = UIApplication.sharedApplication().windows[0] as UIWindow 
window.rootViewController = navigationController 

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

Смежные вопросы