WKWebView子类在dealloc上崩溃

时间:2016-05-05 21:19:54

标签: ios objective-c automatic-ref-counting wkwebview

当我的WKWebView子类(MyWKWebViewdealloc时,它会崩溃:

  

2016-05-05 15:40:08.814 MyApp [15559:202920] - [MyViewController   dealloc]:在MyViewController中dealloc objc [15559]:无法形成弱点   引用MyWKWebView类的实例(0x7f9db7f0dbf0)。它是   可能是这个对象被过度释放,或者正在进行中   解除分配。

我没有对MyWKWebView的弱引用,但MyWKWebView本身对我的UIViewController子类(MyViewController)持有弱引用,MyWKWebView拥有WKWebView }。

思想?

1 个答案:

答案 0 :(得分:2)

我没有意识到的一个显而易见的重要细节:我的MyWKWebView子类(UIScrollViewDelegate)符合WKWebView。 (我正在努力使UIWebView API与WKWebView兼容,因此我可以轻松地在iOS7及更高版本之间进行交换。)

这很重要,因为UIScrollViewDelegate已经符合#if TARGET_OS_IPHONE WK_CLASS_AVAILABLE(10_10, 8_0) @interface WKWebView : UIView #else ,但在the header中却没有这样说:

@interface WKWebView () WK_WEB_VIEW_PROTOCOLS

但是,如果您查看WKWebViewInternal.h header,我们会看到一个可疑类别:

WK_WEB_VIEW_PROTOCOLS

如果我们在文件中进一步查看,我们会在iOS上看到<UIScrollViewDelegate>#if PLATFORM(IOS) #define WK_WEB_VIEW_PROTOCOLS <UIScrollViewDelegate> #endif

WKWebView

我找不到任何会明确导致过度发布的地方,但我肯定会因为不允许调用正确的UIScrollViewDelegate方法而在UIScrollViewDelegate中搞砸了。

解决方法是在单独的对象中实现{{1}}。