
自从用了 Texture(原来的 ASDK)以后,顺便把图片请求库换成了 PINRemoteImage,结果在 Fabric 上看到 crash 数量大量增长。最多的就是如下这种:
Crashed: com.apple.NSURLSession-work 0 CoreFoundation 0x18bb67d9c CFDictionaryGetValue + 76 1 Foundation 0x18c74ceb8 _NSSetLongLongValueAndNotify + 72 2 CFNetwork 0x18c2b4fa4 -[__NSCFLocalSessionTask _task_onqueue_didFinish] + 428 3 CFNetwork 0x18c2b7708 -[__NSCFLocalSessionTask connection:didFinishLoadingWithError:] + 72 4 CFNetwork 0x18c36d298 __51-[__NSCFURLLocalSessionConnection _task_sendFinish]_block_invoke + 136 5 CFNetwork 0x18c36d204 -[__NSCFURLLocalSessionConnection _task_sendFinish] + 88 6 libdispatch.dylib 0x18ab4a9e0 _dispatch_call_block_and_release + 24 7 libdispatch.dylib 0x18ab4a9a0 _dispatch_client_callout + 16 8 libdispatch.dylib 0x18ab58ad4 _dispatch_queue_serial_drain + 928 9 libdispatch.dylib 0x18ab4e2cc _dispatch_queue_invoke + 884 10 libdispatch.dylib 0x18ab5aa50 _dispatch_root_queue_drain + 540 11 libdispatch.dylib 0x18ab5a7d0 _dispatch_worker_thread3 + 124 12 libsystem_pthread.dylib 0x18ad53100 _pthread_wqthread + 1096 13 libsystem_pthread.dylib 0x18ad52cac start_wqthread + 4 搜了一圈,发现 14 年的时候 AFNetworking 也出现过类似问题
总结起来就是 libdispatch 的实现估计有问题,在多线程 racing 的情况下对 state 用 KVO 有概率造成 crash
AFNetworking 最后用了 method swizzle 来实现对 state 变化的观察,见此
PINRemoteImage 上也有人提了相关问题了,还未做修改
1 kitalphaj 2017-09-07 18:26:23 +08:00 感谢分享。话说用了 ASDK 的感受可以说一下么?要真实感受,不要夸张 ;) |
2 xi_lin OP @kitalphaj 挺好用的,特别是用 flex 布局,写起来比 auto layout 更灵活一些,而且不用考虑重用的时候各种条件样式的问题。 在 table 中用的时候要注意下数据模型的线程安全,不要在 reload 的时候改数据。 |
3 workhardupc 2017-09-14 09:40:48 +08:00 @xi_lin 解决后,线上验证了吗? |
4 xi_lin OP @workhardupc 今天刚过审,等几天看看数据 |
5 workhardupc 2017-09-14 16:00:02 +08:00 @xi_lin 好的,我们也遇到这个问题,有结果后给说下,谢谢 |
6 workhardupc 2017-09-14 20:11:49 +08:00 @xi_lin 方便加 QQ 沟通下吗?我的 QQ:403758652 |
7 workhardupc 2017-09-18 12:10:56 +08:00 |
8 xi_lin OP @workhardupc 数据不错,这几天都没有这个 crash 了。 我是把 kvo 给删了,因为没用到 progressive 这个功能 https://github.com/xilin/PINRemoteImage/tree/kvo-workaround 之前加你 qq 了,你没通过 |