在WkWebView与JavaScript交互中,经常会在原生中注入MessageHandler,app中注入MessageHandler的方法
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];
config.userContentController = [WKUserContentController new];
//注入handler
[config.userContentController addScriptMessageHandler:self name:@ HandlerName
这里我们发现在向JS中注入handler的时候强引用了self,最终导致内存泄漏
解决方法 添加一个新类 WeakScriptMessageDelegate
@interface WeakScriptMessageDelegate : NSObject WKScriptMessageHandler
@property (nonatomic, weak) id WKScriptMessageHandler scriptDelegate;
- (instancetype)initWithDelegate:(id WKScriptMessageHandler )scriptDelegate;
@implementation WeakScriptMessageDelegate
- (instancetype)initWithDelegate:(id WKScriptMessageHandler )scriptDelegate {
self = [super init];
if (self) {
_scriptDelegate = scriptDelegate;
}
return self;
- (void)userContentController:(WKUserContentController *)user