关于 Swift for-loop 的内存管理问题
Posted
技术标签:
【中文标题】关于 Swift for-loop 的内存管理问题【英文标题】:Memory management issue about Swift for-loop 【发布时间】:2020-12-22 05:43:24 【问题描述】:我接管了一些遗留代码,有这样的代码sn-p
let albumGroups = data.getJSONArray("groups")
let groupNum = albumGroups.length()
var album: JSONObject
for i in 0..<groupNum
album = albumGroups.getJSONObject(i)
orderSummary.album.name[i] = album.getString("name")
当应用程序在调试模式下构建时,它可以正常运行。
但是如果它是在Release模式下构建的,它会在i为1时在album.getString("name")
崩溃。错误表明专辑变量已被释放。
我尝试在启用 Address Sanitizer 标志的情况下运行该应用程序。
我的问题是,据我所知,专辑变量超出了循环的范围,为什么它在第一个循环结束后被释放?
【问题讨论】:
【参考方案1】:检查orderSummary.album
不是弱引用。如果是,则您在第 1 行初始化的 Album
将立即销毁,这将解释当您尝试设置 orderSummary.album.name[i]
时发生的崩溃。
【讨论】:
那行代码可能有误导性,我已经删除了。以上是关于关于 Swift for-loop 的内存管理问题的主要内容,如果未能解决你的问题,请参考以下文章
尽管包含更多条目,但数组仅在 for-loop 之后向 Struct 添加单个条目 - Swift/Xcode