我有一个 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>)
Run Code Online (Sandbox Code Playgroud)
cre*_*eak 13
经过多次反复试验,我能够解决我自己的问题。
事实证明,我工作的这个应用程序(我继承的代码)有一个 Struct 用于对业务中使用的主要对象之一进行建模,出于某种原因,后端团队正在发送整个对象(未过滤以满足客户端需求) ,最后一位 iOS 开发人员正在解析和存储每个属性,包括许多(许多,许多)无关的属性。我能够确定需要分配的内存量仅用于初始化这些结构之一,以至于它在 A6 芯片设备上使用时导致应用程序崩溃。我注意到所有崩溃都发生在 iOS 10.3.3 上,但更大的线索是所有崩溃都发生在 iPhone 5 和 5c 上。
通过一次删除 1 个未使用/不必要的属性,我能够找到溢出开始发生的确切点。所以我简单地审计了对象(以及应用程序中的其他类似情况)并从结构中删除了所有未使用的变量,并最终开始与后端团队合作,继续从发送到应用程序的 JSON 有效负载中删除这些属性,以减少四处走动的数据。
如果这甚至可以帮助一个人避免我必须做的故障排除,我相信我会在来世得到一个有利的家。
| 归档时间: |
|
| 查看次数: |
2152 次 |
| 最近记录: |