2014-09-30 53 views
0

目前我有一個WebViews的小問題,不釋放內存使用的時間,即時通訊調用一些WebView(用戶可以打開它們切換回地圖(通過Tabbar),並打開一個新的),iOS 8 WebView後的自由內存(swift)

每次一個WebView被稱爲它使用高達30MB的RAM,所以在10個WebViews應用程序運行到內存警告,所以即時通訊尋找一種方式(因爲我發現在其他職位是沒有辦法它會自動處理)在從webview切換回地圖後釋放內存。

這是我打電話給我的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#> 
    } 

發佈網頁視圖的內存使用情況?或者無論如何減少內存的使用?

回答

0

從你的代碼中我推斷webView是在一個筆尖。

要減少內存佔用,您可能需要嘗試分別在viewWillAppear和viewWillDisappear中創建和刪除webView。

這意味着如果用戶要回去,可能需要重新加載內容。從用戶的角度來說令人討厭。

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 

我在代碼情況下嘗試了後一種情況,就像問題中所描述的那樣。我看到內存釋放有所改善,但我不得不承認內存沒有回到我從哪裏開始 - 不知道爲什麼。我希望有人有更好的解決方案。