我的应用程序中有以下崩溃,但我无法重现它以找到其源代码。主要工作是多个异步网络上传请求,这些请求放置在并发操作队列中,也支持后台转换。
崩溃:NSOperationQueue 0x174037ae0 :: NSOperation 0x17044f7b0 (QOS: DEFAULT)EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x0000000ce6fabec8
崩溃:NSOperationQueue 0x170036660 :: NSOperation 0x17425e360 (QOS: DEFAULT)
0 libobjc.A.dylib 0x181c21704 objc_object::release() + 8
1 CFNetwork 0x1839a196c __destroy_helper_block_.465 + 40
2 libsystem_blocks.dylib 0x1820afa28 _Block_release + 144
3 Foundation 0x183c0623c -[NSBlockOperation dealloc] + 64
4 Foundation 0x183cc245c __NSOQSchedule_f + 484
5 libdispatch.dylib 0x18205a1bc _dispatch_client_callout + 16
6 libdispatch.dylib 0x1820683dc _dispatch_queue_serial_drain + 928
7 libdispatch.dylib 0x18205d9a4 _dispatch_queue_invoke + 652
8 libdispatch.dylib 0x18206a34c _dispatch_root_queue_drain + 572
9 libdispatch.dylib 0x18206a0ac _dispatch_worker_thread3 + 124
10 libsystem_pthread.dylib 0x1822632a0 _pthread_wqthread + 1288
11 libsystem_pthread.dylib 0x182262d8c start_wqthread + 4
该应用程序是用 Swift 3 编写的。有什么可以提出的吗?
我刚刚通过更新第三方库解决了这个完全相同的崩溃日志。该库中的问题是将块对象定义为(强,非原子)而不是(副本)。它是一个 Objective-C 库,但同样的强/弱原则也适用于 Swift 块对象属性。如果将这些块添加到 NSOperationQueue,则可以看到该错误。NSOperationQueues 中是否有任何强块属性或任何强引用?