WebViewで画面遷移したときのメモリ使用量について
受付中
回答 0
投稿
- 評価
- クリップ 1
- VIEW 2,328

退会済みユーザー
初めて質問させて頂きます。
環境は、Xcode6.1, Swift1.1 です。
下記のテストコードは、WebViewを表示させて画面遷移(URLジャンプ)を
繰り返しているだけなのですが、どんどんメモリ使用量が増えてしまい、
instruments などを見ても原因が分からず困っています。
一応、メモリ管理のドキュメントなどを見て
https://developer.apple.com/jp/devcenter/ios/library/japanese.html
WebViewのキャッシュ、cookieが怪しいと思い、
・init()でその容量を0する
・タイマーの度にキャッシュを削除する
としているつもりです。
これらをコードに含める事で少しはマシになったのですが、
まだまだ増え続けてしまいます。
WebView に詳しい方がいましたら、
怪しいと思う箇所でも構いませんので教えて頂けないでしょうか。
よろしくお願いします。
環境は、Xcode6.1, Swift1.1 です。
下記のテストコードは、WebViewを表示させて画面遷移(URLジャンプ)を
繰り返しているだけなのですが、どんどんメモリ使用量が増えてしまい、
instruments などを見ても原因が分からず困っています。
一応、メモリ管理のドキュメントなどを見て
https://developer.apple.com/jp/devcenter/ios/library/japanese.html
WebViewのキャッシュ、cookieが怪しいと思い、
・init()でその容量を0する
・タイマーの度にキャッシュを削除する
としているつもりです。
これらをコードに含める事で少しはマシになったのですが、
まだまだ増え続けてしまいます。
WebView に詳しい方がいましたら、
怪しいと思う箇所でも構いませんので教えて頂けないでしょうか。
よろしくお願いします。
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
@IBOutlet weak var window: NSWindow!
@IBOutlet weak var view: NSView!
var webview: TWVWebView!
func applicationDidFinishLaunching(aNotification: NSNotification) {
webview = TWVWebView()
webview.frame = NSRect(x: 0, y: 100, width: 1200, height: 1000)
view.addSubview(webview)
}
}
import Foundation
import WebKit
class TWVWebView: WebView {
let tInterval: NSTimeInterval! = 5.0
var timer: NSTimer?
var i: Int! = 0
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init() {
// init()内の具体的な値は何でも良い
super.init(frame: NSRect(x: 0, y: 0, width: 300, height: 500), frameName: nil, groupName: nil)
self.frameLoadDelegate = self
timer = NSTimer.scheduledTimerWithTimeInterval(tInterval, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
// キャッシュの容量を0にする
NSURLCache.sharedURLCache().memoryCapacity = 0
NSURLCache.sharedURLCache().diskCapacity = 0
}
// WebView の Delegate
// 今回は関係なし
override func webView(sender: WebView!, didStartProvisionalLoadForFrame frame: WebFrame!) {
}
override func webView(sender: WebView!, didFinishLoadForFrame frame: WebFrame!) {
}
override func webView(sender: WebView!, didFailProvisionalLoadWithError error: NSError!, forFrame frame: WebFrame!) {
}
// Timer で画面遷移を繰り返す
func update() {
if i == 0 {
self.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.google.co.jp/")!))
i = i + 1
} else if i == 1 {
self.mainFrame.loadRequest(NSURLRequest(URL: NSURL(string: "http://www.yahoo.co.jp")!))
i = i + 1
} else {
self.goBack()
i = i - 1
}
twvDeleteCache()
}
// キャッシュ、cookie を削除する
func twvDeleteCache() {
var cookie: NSHTTPCookie
var storage: NSHTTPCookieStorage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
var ary: Array = storage.cookies!
for cookie in ary {
storage.deleteCookie(cookie as NSHTTPCookie)
}
NSURLCache.sharedURLCache().removeAllCachedResponses()
}
}
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
まだ回答がついていません
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる