美文网首页
WebViewJavascriptBridge对象销毁

WebViewJavascriptBridge对象销毁

作者: 学习无底 | 来源:发表于2016-10-18 10:16 被阅读672次

WebViewJavascriptBridge对象销毁

在项目中,为了与js交互,页面A引用了WebViewJavascriptBridge框架创建了WebViewJavascriptBridge对象,没有测试页面A退出时,页面A是否销毁。近日,页面A播放了一段音乐,发现在退出页面A后,音乐仍在播放中,没法关闭,只有kill掉app。
查找后发现,WebViewJavascriptBridge部分源码如下

@implementation WKWebViewJavascriptBridge {
WKWebView* _webView;
id<WKNavigationDelegate> _webViewDelegate;
long _uniqueId;
WebViewJavascriptBridgeBase *_base;
}
- (void)setWebViewDelegate:(id<WKNavigationDelegate>)webViewDelegate {
_webViewDelegate = webViewDelegate;
}

需要在 -(void)viewWillDisappear:(BOOL)animated- (void)viewDidDisappear:(BOOL)animated 中设置setWebViewDelegate为nil,页面A才会销毁。

项目中导入了JAPatch,main.js中相关代码如下:

viewWillDisappear: function(animated) {
self.super().viewWillDisappear(animated);
self.bridge().setWebViewDelegate(null);
},

执行后发现页面A销毁了,但相应的WebViewJavascriptBridge对象没有销毁,音乐播放仍在继续中。 想起在JSPatch文档-内存释放问题中看到的

如果一个 OC 对象被 JS 引用,或者在 JS 创建这个对象,这个 OC 对象在退出作用域后不会马上释放,而是会等到 JS 垃圾回收时才释放,这会导致一些 OC 对象延迟释放,
没有被 JS 引用过的 OC 对象不受影响。

经过测试发现,在页面A销毁后,一分钟左右时间之后,相应的WebViewJavascriptBridge对象会销毁(dealloc会调用),音乐播放停止。怎么在JS中部引用WebViewJavascriptBridge对象呢?KVC。代码如下:

viewWillDisappear: function(animated) {
self.super().viewWillDisappear(animated);
//delegate是强引用
self.setValue_forKeyPath(null, "bridge.webViewDelegate");
},

经过测试,没有问题,完美!

相关文章

  • WebViewJavascriptBridge对象销毁

    WebViewJavascriptBridge对象销毁 在项目中,为了与js交互,页面A引用了WebViewJav...

  • 优雅地创建和销毁对象

    创建和销毁对象概述 何时以及如何创建对象 何时以及如何避免创建对象 如何确保对象适时地销毁 如何管理对象销毁之前必...

  • EffectJava翻译系列(第一章:创建和销毁对象)

    1.创建和销毁对象 这个章节包含创建和销毁对象,什么时候和怎样创建,什么时候避免创建,如何确保对象在准确的时机销毁...

  • iOS:对象释放流程

    参考文档:对象销毁过程:Objc对象的销毁过程[https://www.jianshu.com/p/7732278...

  • 创建和销毁对象

    学习目的: 何时以及如何创建对象 何时以及如何避免创建对象 如何确保对象适时销毁 如何管理对象销毁前必须进行的各种...

  • 《Effective Java》读书笔记(持续更新)

    引言 创建和销毁对象 何时以及如何创建对象,何时以及如何避免创建对象,如何确保创建的对象能够被适时地销毁,以及如何...

  • WebViewJavascriptBridge使用总结

    WebViewJavascriptBridge github地址:WebViewJavascriptBridge ...

  • 创建和销毁对象

    1、何时以及如何创建对象? 2、何时以及如何避免创建对象? 3、如何确保它们能够适时地销毁,以及如何管理对象销毁之...

  • Effective Java Note (对象的创建和销毁)

    Effective Java Note (对象的创建和销毁) 一、对象的创建和销毁 1. 考虑使用静态工厂方法替代...

  • effective java 第一周

    第二章:对象的产生和销毁 其围绕的主要问题是:何时,如何产生对象;何时,如何避免产生对象;如何确认对象及时销毁;以...

网友评论

      本文标题:WebViewJavascriptBridge对象销毁

      本文链接:https://www.haomeiwen.com/subject/ennzyttx.html