2016-10-21 4 views
3

Trifft jemand den Absturz unten?iOS WebView WTF Absturz

0 WebKitLegacy 0x000000018f766884 std::__1::unique_ptr<WTF::Function<void()>, std::__1::default_delete<WTF::Function<void()> > > WTF::MessageQueue<WTF::Function<void()> >::waitForMessageFilteredWithTimeout<WTF::MessageQueue<WTF::Function<void()> >::waitForMessage()::'lambda'(WTF::Function<void()> const&)>(WTF::MessageQueueWaitResult&, WTF::MessageQueue<WTF::Function<void()> >::waitForMessage()::'lambda'(WTF::Function<void()> const&)&&, double) + 192 
1 WebKitLegacy 0x000000018f765e68 WebCore::StorageThread::threadEntryPoint() + 68 
5 JavaScriptCore 0x000000018dabf35c WTF::threadEntryPoint(void*) + 212 
6 JavaScriptCore 0x000000018dabf26c WTF::wtfThreadEntryPoint(void*) + 24 
8 libsystem_pthread.dylib 0x0000000188c9f860 __pthread_body + 240 
9 libsystem_pthread.dylib 0x0000000188c9f770 __pthread_body 
10 libsystem_pthread.dylib 0x0000000188c9cdbc start_wqthread + 0 
+0

Schließlich finde ich, dass dieser Absturz mit Localstorage-Thread zusammenhängt. Wenn wir window.localStorage in JavaScript aufrufen, löst es webkit aus, um einen lokalen Speicher zu erzeugen. –

Antwort

2

Schließlich finde ich, dass dieser Absturz zusammenhängt Thread zu local. Wenn wir window.localStorage in JavaScript aufrufen, löst es aus, dass webkit einen lokalen Speicher-Thread erstellt, und der Thread wird gelöscht, wenn alle UIWebView-Instanzen die Zuordnung aufheben. Tatsächlich wird der Localstorage-Thread später als die UIWebView-Instanz gelöscht, was einen Absturz des Wildpointers zur Folge hat. Sie können also eine UIWebView-Instanz erstellen, die "window.localstorage.setItem (x, x)" ausführt und diese niemals löscht, oder Sie können WKWebView verwenden.

0

Stop-Laden webView und entfernen delegate vor der Ansicht zu verlassen.

Bevor Sie eine Instanz von UIWebView freigeben, für die Sie einen Delegaten festgelegt haben, müssen Sie zuerst seine delegate-Eigenschaft auf nil setzen. Dies kann getan werden, in Ihrer Dealloc-Methode.

Versuchen Sie, Delegierter für WebView-nil und WebView Laden in viewWillUnload Methode von Viewcontroller stoppen:

- (void)viewWillUnload { 

    [webView setDelegate:nil]; 
    [webView stopLoading]; 
} 
+1

Ich habe das in der Dealloc-Funktion gemacht, und ich kann den Absturz nicht reproduzieren. Ich habe die Quelle von Webkit gelesen und festgestellt, dass sie sich auf den WebView-Speichervorgang beziehen kann. –

+0

verwenden Sie ARC im Projekt? @ 1350WATER –

+0

ja, ich benutze ARC. –