1
SeanChense 2015-12-13 22:53:00 +08:00
访问到了被释放的内存
今天也遇到一个,最后检查发现是 NSString 被声明成 assign 了 |
2
ainopara OP @SeanChense 这里完全不涉及我的代码,看上去能让 app 在这个位置崩溃,只可能是 UIWebView 的 delegate 指针变成了 nil 但仍然向其发送了消息?
|
3
SeanChense 2015-12-13 23:03:44 +08:00
@ainopara 向 nil 发送消息是安全的。
|
5
SeanChense 2015-12-13 23:12:07 +08:00 via iPhone
你的 WebView 是怎么加载资源的?
访问链接还是加载一段给定的 html 字符串? |
6
ainopara OP |
7
ainopara OP @SeanChense 你提醒我了,我的 app 里既使用了前者,也存在后者。
而且在 Crash 信息中还看不出来是哪一个。个人感觉给定字符串的情况出问题的可能行比较小。 |
8
SeanChense 2015-12-13 23:50:08 +08:00
@ainopara 非也,我觉得给传参传一个字符串然后出这个问题反而可能性大。
就像我今天碰到的一样 property 声明成 assign ,再从对象总取出来插入数据库的时候就出现这个问题了。 |
11
ainopara OP @SeanChense 有道理,比如向 delegate 发送了消息,而 delegate 已经不存在了却没有变为 nil 。
或者向 delegate 发送消息附带的参数出现你说的情况。 另外观察发现,崩溃时同时还存在这种线程: com.apple.coremedia.player.async AVAudioSession Notify Thread 怀疑和浏览器中的视频播放有关。 |
12
skylancer 2015-12-14 09:53:38 +08:00 1
这个好像是已知的问题,好像是出在视频解码上
|
13
SeanChense 2015-12-14 10:36:40 +08:00 via iPhone 1
@ainopara 没有实际代码不好分析,你可以用 NSZombie 定位查一下
|
14
ainopara OP @skylancer 如果是这样,就确认是苹果的问题了。之前主要是担心是自己配置 UIWebView 的时候没做好导致的。
@SeanChense 有实际代码也不好分析,因为我没办法复现这个崩溃问题,我自己用的时候也从来没遇到过。。只能靠 Fabric 收集到的记录推测。 |
16
ainopara OP @11 没有,其他线程基本都是
__psynch_cvwait + 8 mach_msg_trap + 8 这种状态。 我猜测是过去的某个步骤传入了错误的数据,当时没访问数据,但执行到这里需要访问了才崩溃的。 |
17
numbbuaa 2016-01-01 22:35:06 +08:00 1
感觉是 UIWebView 的 delegate (比如 VC )被释放了,建议最好在 delegate 类的 dealloc 方法里面把 UIWebView 的 delegate 置成 nil
|
18
ainopara OP @SeanChense
@11 @skylancer @numbbuaa 最终问题解决了。解决方案在这里: http://stackoverflow.com/questions/29139034/iosexc-bad-access-for-webview-delegate 最终通过 dealloc 的时候向 webview 发送 stopLoading 消息解决了。( delegate 设置为 nil 这个之前有做过,但是不配合 stopLoading 一起用并不能消除这种 Crash ) |
19
SeanChense 2016-02-06 21:03:45 +08:00 1
@ainopara 哈哈,恭喜恭喜。
|