【问题标题】:How to fix 'outlined consume of Model?' runtime crash on Swift 5如何修复“模型的概述消耗”? Swift 5 运行时崩溃
【发布时间】:2019-09-16 08:47:14
【问题描述】:

我刚刚将我的一个应用程序升级到了 Swift 5,我并没有太大的改变,似乎也没有任何问题,所以我只是在生产环境中发布了它(幸运的是分阶段发布)。 1 天后,我开始在 Crashlytics 上看到一个非常奇怪的崩溃,它影响了 15% 的使用我的应用程序的人。

这是堆栈跟踪:

Crashed: com.apple.main-thread
0  (Missing)                      0x31698aa1503e0 (Missing)
1  libswiftCore.dylib             0x1afa5ac68 _swift_release_dealloc + 28
2  App                            0x104194c3c outlined consume of MyModel? + 4300033084
3  App                            0x104482cb8 @objc MyController.__ivar_destroyer (<compiler-generated>)
4  libobjc.A.dylib                0x180f267cc object_cxxDestructFromClass(objc_object*, objc_class*) + 148
5  libobjc.A.dylib                0x180f366b8 objc_destructInstance + 68
6  libobjc.A.dylib                0x180f36720 object_dispose + 16
7  UIKitCore                      0x1ae2edac0 -[UIResponder dealloc] + 152
8  UIKitCore                      0x1add173e0 -[UIViewController dealloc] + 1748
9  App                            0x10431d82c BaseViewController.__deallocating_deinit (MyController.swift:56)
10 App                            0x10431d85c @objc BaseViewController.__deallocating_deinit (<compiler-generated>)
11 libobjc.A.dylib                0x180f41b9c (anonymous namespace)::AutoreleasePoolPage::pop(void*) + 672
12 CoreFoundation                 0x181d59f40 _CFAutoreleasePoolPop + 28
13 CoreFoundation                 0x181cd8e00 __CFRunLoopRun + 1932
14 CoreFoundation                 0x181cd8354 CFRunLoopRunSpecific + 436
15 GraphicsServices               0x183ed879c GSEventRunModal + 104
16 UIKitCore                      0x1ae2c3b68 UIApplicationMain + 212
17 App                            0x104108468 main (AppDelegate.swift:21)
18 libdyld.dylib                  0x18179e8e0 start + 4

我已经在网上搜索了一些东西,但我在 Swift 论坛上只找到了一个与此不太相关的帖子。

MyModel 实际上是一个嵌套在另一个模型中的结构模型。 MyController 是管理模型的非常大的控制器。

当弹出控制器以及系统尝试释放所有相关属性时,崩溃似乎很明显。

我尝试了很多次都没有结果,我真的不知道从哪里开始寻找。

有人遇到过同样的问题吗?

更新 [部分修复]: 这似乎是由广告框架引起的堆栈损坏,为了解决这个问题,我将 MyModel 从 Struct 移到了 Class,它现在位于堆上,无法双重释放。

【问题讨论】:

  • 请提供更多信息。我们不知道你的 VC 是如何操纵这个模型的。至于 Crashlytics,它喜欢将相关问题归为一组,但有时它会出现严重错误,并导致您对完全不相关的事物进行疯狂追逐。

标签: swift swift5


【解决方案1】:

根据我的经验,大多数outlined consume of 错误是由并发问题引起的。当一个队列/线程读取结构而另一个队列/线程在没有同步的情况下修改它(互斥锁、信号量、屏障等)。

您需要检查所有线程堆栈以查看哪个线程与主(崩溃)线程同时访问MyModel

【讨论】:

    猜你喜欢
    • 2019-09-08
    • 1970-01-01
    • 2019-10-07
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多