在objc_object中崩溃:: release()

时间:2018-05-29 09:28:29

标签: ios swift nsurlsession

我的应用程序崩溃了,这是调用堆栈:

Crashed: com.apple.NSURLSession-work
0  libobjc.A.dylib                0x1829d17f4 objc_object::release() + 16
1  libsystem_blocks.dylib         0x18318ca5c _Block_release + 152
2  libdispatch.dylib              0x1830ecae4 _dispatch_client_callout + 16
3  libdispatch.dylib              0x1831297a8 _dispatch_continuation_pop$VARIANT$armv81 + 416
4  libdispatch.dylib              0x183132acc _dispatch_source_invoke$VARIANT$armv81 + 908
5  libdispatch.dylib              0x18312b074 _dispatch_queue_serial_drain$VARIANT$armv81 + 248
6  libdispatch.dylib              0x18312bad8 _dispatch_queue_invoke$VARIANT$armv81 + 328
7  libdispatch.dylib              0x18312c47c _dispatch_root_queue_drain_deferred_wlh$VARIANT$armv81 + 332
8  libdispatch.dylib              0x18313444c _dispatch_workloop_worker_thread$VARIANT$armv81 + 612
9  libsystem_pthread.dylib        0x18341fe70 _pthread_wqthread + 860
10 libsystem_pthread.dylib        0x18341fb08 start_wqthread + 4

我不知道如何复制这次崩溃,你有什么想法会导致这样的崩溃吗?

2 个答案:

答案 0 :(得分:4)

通常,release()中的崩溃是由释放无效对象引起的。这可能是由许多事情引起的:

  • 如果您的应用是手动内存管理(非ARC),则可能是由于过度释放对象造成的。
  • 如果存在对象的非归零弱引用(通常在OS本身的某些非ARC类中),这可能是由于在对象被销毁后释放引用的代码引起的(尽管这通常会导致崩溃) objc_msgSend)。
  • 如果您正在操作保留对象的变量,并尝试在多个线程中同时更改它而不将该变量标记为原子,则可能会导致此类事件发生。

奇怪的是,这涉及一个块,当块运行时应由队列保留,因此没有手动保留释放错误,除非被释放的对象不是块,否则这是不可能的。本身。

剩下的就是你的街区中包含的对象:

  • 可能是其中任何一个双指针(例如NSError ** inOutParam)?如果要在块中使用它们,则需要单独强力保留块外的那些。
  • 他们中的任何一个都很弱吗?如果是这样,你需要在使用前让它们在块内强大(但我希望这会导致objc_msgSend崩溃)。
  • 您是否从多个线程访问任何类型的共享资源(对象,字典,数组)?如果是这样,你是否有适当的同步(对于属性,声明为原子;对于字典或数组,对该字典的所有访问或用@synchronized包装的数组)?

显然,没有足够的信息可以肯定地告诉你为什么会遇到这种崩溃,但这些是你应该寻找的东西。毫无疑问,其他人,我并没有想到我的头脑。

希望有所帮助。

答案 1 :(得分:0)

我也遇到同样的问题。真奇怪堆栈跟踪如下。 这些库libobjc, libnetwork, libdispatch, and libsystem_pthread是Apple库。因此,我怀疑这是Apple库的错误。

该项目由Swift编写,并具有ARC功能。

该设备为iPhone 6s,具有iOS 12.0.0 (16A366)no jailbroken

Crashed: com.apple.network.connections
0  libobjc.A.dylib                0x1df2d2b00 objc_object::release() + 16
1  libnetwork.dylib               0x1e1172204 -[NWConcrete_nw_association .cxx_destruct] + 76
2  libobjc.A.dylib                0x1df2b8468 object_cxxDestructFromClass(objc_object*, objc_class*) + 148
3  libobjc.A.dylib                0x1df2c870c objc_destructInstance + 68
4  libobjc.A.dylib                0x1df2c8774 object_dispose + 16
5  libnetwork.dylib               0x1e11720c4 -[NWConcrete_nw_association dealloc] + 680
6  libnetwork.dylib               0x1e12a44b0 __nw_endpoint_has_associations_block_invoke + 88
7  libnetwork.dylib               0x1e12a4230 nw_endpoint_has_associations + 180
8  libnetwork.dylib               0x1e10a5048 __nw_context_purge_idle_endpoints_block_invoke_2.101 + 32
9  libnetwork.dylib               0x1e10a4d74 __nw_context_purge_idle_endpoints_block_invoke.100 + 124
10 libnetwork.dylib               0x1e10a48ac nw_context_purge_idle_endpoints + 316
11 libdispatch.dylib              0x1dfb24484 _dispatch_client_callout + 16
12 libdispatch.dylib              0x1dfac7874 _dispatch_continuation_pop$VARIANT$mp + 412
13 libdispatch.dylib              0x1dfad7be4 _dispatch_source_invoke$VARIANT$mp + 1704
14 libdispatch.dylib              0x1dfacda64 _dispatch_workloop_invoke$VARIANT$mp + 2000
15 libdispatch.dylib              0x1dfad4f00 _dispatch_workloop_worker_thread + 600
16 libsystem_pthread.dylib        0x1dfd060f0 _pthread_wqthread + 312
17 libsystem_pthread.dylib        0x1dfd08d00 start_wqthread + 4