奇葩bug搜集

遇到一个delegate未置空导致的问题

2017-06-21  本文已影响552人  Funnyer

1、报错信息:

Cannot form weak reference to instance (0x7f932cb05fb0) of class FWebViewController. It is possible that this object was over-released, or is in the process of deallocation.

2、问题描述:

A控制器(包含scrollView及其子类,并设置了其代理),B控制器(WKWebView,并设置了webView.scrollView.delegate = self),当A push 到 B,然后B pop回 A时,iOS9及其之前的版本会引起程序崩溃,iOS10 及其以后不会出现这样的问题。

3、解决办法:

根据报错信息来看:这个对象有可能是被过度释放,或正在被释放的过程中。
解决方案就是在B将要退出时把webView.scrollView.delegate = nil
在dealloc中清空代理,手动释放delegate。

4、疑问?

webView.scrollView.delegate应该和之前的A控制器的scrollview的delegate是没关系的,为什么导致崩溃的原因中感觉是有关系的?希望大神可以解释一下。

5、知识扩展:

delegate可以在dealloc里面置为nil,这是一个保险的做法,但是又不是必须的。这样做的原因是可以避免这个类被释放掉了,但是delegate却还会被引用造成的问题。

上一篇下一篇

猜你喜欢

热点阅读