自从用了 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 上也有人提了相关问题了,还未做修改
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.