首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在objc_object::release()中崩溃

在objc_object::release()中崩溃
EN

Stack Overflow用户
提问于 2018-05-29 09:28:28
回答 1查看 2.1K关注 0票数 1

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

代码语言:javascript
复制
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

我不知道如何复制这个崩溃,你有什么想法可以造成这样的崩溃吗?

EN

回答 1

Stack Overflow用户

发布于 2018-05-29 16:49:50

通常,releasing ()中的崩溃是由释放无效对象引起的。造成这种情况的原因有以下几点:

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

奇怪的是,这涉及到一个块,它应该在块运行时由队列保留,所以缺少手动的保留版本错误,这是不可能的,除非被释放的对象不是块本身。

剩下的是块中包含的对象:

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

显然,没有足够的信息可以确定你为什么要经历这次崩溃,但这些都是你应该寻找的东西。毫无疑问,还有一些人我不是在想我的想法。

希望这能有所帮助。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50580888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档