ios WKWebView 注意事項和坑

1.內(nèi)存泄漏

現(xiàn)象:WKWebView所在的ViewController不執(zhí)行dealloc

原因:下面的代碼引起


WKWebViewConfiguration * wkconfiguration = [[WKWebViewConfiguration alloc]init];
// userContentController 強引用了 self (控制器)
[wkconfiguration.userContentController addScriptMessageHandler:self name:@"JsBridge"];

如果沒有執(zhí)行對應(yīng)的removeScriptMessageHandlerForName,就會造成內(nèi)存泄漏。

解決辦法:
方法1.新建一個類

WeakScriptMessageDelegate.h

#import <Foundation/Foundation.h>
#import <WebKit/WebKit.h>

@interface WeakScriptMessageDelegate : NSObject<WKScriptMessageHandler>

@property (nonatomic,weak)id<WKScriptMessageHandler> scriptDelegate;

- (instancetype)initWithDelegate:(id<WKScriptMessageHandler>)scriptDelegate;

@end


WeakScriptMessageDelegate.m

#import "WeakScriptMessageDelegate.h"


@implementation WeakScriptMessageDelegate

- (instancetype)initWithDelegate:(id<WKScriptMessageHandler>)scriptDelegate{
    self = [super init];
    if (self) {
        _scriptDelegate = scriptDelegate;
    }
    return self;
}

- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message{
    [self.scriptDelegate userContentController:userContentController didReceiveScriptMessage:message];
}

@end


然后對應(yīng)改成:

WKWebViewConfiguration * wkconfiguration = [[WKWebViewConfiguration alloc]init];
[wkconfiguration.userContentController addScriptMessageHandler:[[WeakScriptMessageDelegate alloc] initWithDelegate:self] name:@"JsBridge"];

方法2:(不建議用這個)

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    [self.webView.configuration.userContentController removeScriptMessageHandlerForName:@"JsBridge"];
    
}
//因為移除后跟js的交互就失效了,viewWillDisappear并不代表dealloc了

2.頁面空白

現(xiàn)象: 有時候返回到上一個頁面發(fā)現(xiàn)頁面變空白了,或者從后臺切會到前臺后發(fā)現(xiàn)頁面空白了

原因:我猜測是內(nèi)存扛不住了
解決辦法:(9.0及以后)

- (void)webViewWebContentProcessDidTerminate:(WKWebView *)webView{
    //reload你的URL
}
//注意這個是wkwebview.navigationDelegate的協(xié)議
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容