首页 > 解决方案 > 如何使用“Optional 的概述副本”消息调试崩溃?

问题描述

我有一个 Swift 4 应用程序,突然之间,我开始收到许多崩溃消息记录outlined copy of Account?。堆栈跟踪中引用了几个不同的文件,尽管它最常发生在应用程序的入口点。

我一直无法重现该错误。每个崩溃实例都发生在 iOS 10.3.3 中,Apple 无法将其作为模拟器下载。除了一个 Twitter 线程之外,我也找不到任何提及此错误消息的内容,该线程以“我忘记了如何解决这个问题”结尾。

有没有人看到这个并能够修复它?这是一些堆栈跟踪。对于上下文,Requestable是一个枚举,并且在tableView(_:cellForRowAt:)代码中引用了一个实例,并且Account也是在那里引用的一个结构。根据几个用户的说法,他们进入此处引用的屏幕,查看 tableView 一秒钟,然后应用程序崩溃。

Crashed: com.apple.main-thread
0  libswiftCore.dylib             0x30ad78c swift_unknownRetain + 9
1  App Name                       0x3e970d outlined copy of Account? + 3913485
2  App Name                       0x4d4297 outlined copy of Requestable + 4874903
3  App Name                       0x6071d1 TableViewController.tableView(_:cellForRowAt:) (TableViewController.swift:404)
4  App Name                       0x622d49 @objc TableViewController.tableView(_:cellForRowAt:) (<compiler-generated>)

标签: iosswift

解决方案


经过多次试验和错误,我能够解决自己的问题。

事实证明,我工作的这个应用程序(我继承的代码)有一个 Struct 用于对业务中使用的主要对象之一进行建模,并且出于某种原因,后端团队正在发送整个对象(未过滤以满足客户端需求) ,最后一位 iOS 开发人员正在解析和存储每个属性,包括许多(许多、许多)无关的属性。我能够确定,仅用于初始化其中一个结构体所需分配的内存量非常巨大,以至于在 A6 芯片设备上使用时会导致应用程序崩溃。我注意到所有崩溃都发生在 iOS 10.3.3 上,但更大的线索是所有崩溃都发生在 iPhone 5 和 5c 上。

通过一次删除 1 个未使用/不必要的属性,我能够找到溢出开始发生的确切点。所以我只是简单地审核了对象(以及应用程序中的其他类似情况)并从 Structs 中删除了所有未使用的变量,并最终开始与后端团队合作,继续从发送到应用程序的 JSON 有效负载中删除这些属性,以减少四处传播的数据。


推荐阅读