ios - 如何使用“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>)
解决方案
经过多次试验和错误,我能够解决自己的问题。
事实证明,我工作的这个应用程序(我继承的代码)有一个 Struct 用于对业务中使用的主要对象之一进行建模,并且出于某种原因,后端团队正在发送整个对象(未过滤以满足客户端需求) ,最后一位 iOS 开发人员正在解析和存储每个属性,包括许多(许多、许多)无关的属性。我能够确定,仅用于初始化其中一个结构体所需分配的内存量非常巨大,以至于在 A6 芯片设备上使用时会导致应用程序崩溃。我注意到所有崩溃都发生在 iOS 10.3.3 上,但更大的线索是所有崩溃都发生在 iPhone 5 和 5c 上。
通过一次删除 1 个未使用/不必要的属性,我能够找到溢出开始发生的确切点。所以我只是简单地审核了对象(以及应用程序中的其他类似情况)并从 Structs 中删除了所有未使用的变量,并最终开始与后端团队合作,继续从发送到应用程序的 JSON 有效负载中删除这些属性,以减少四处传播的数据。
推荐阅读
- firebase - 在 Firebase 中存储对象时包含类列表
- computer-science - 什么是指令集架构?
- javascript - 如何制作一个响应矩形的箭头
- computer-science - 时钟周期是时间长度吗?
- c++ - 尝试在构造函数中的“glm::cross”初始化我的类段错误
- algorithm - 找到最长的字符串对偶
- c# - 富文本的问题以及它如何在屏幕上统一更新
- java - GMail API aliases.getSendAs().get(0).getDisplayName 返回空(只为0,不为下一个)
- javascript - 有人可以解释这种动态对象扩展运算符语法吗?
- javascript - 在 Angular CLI 项目中导入 SVG 文件?