【问题标题】:Memory management issue about Swift for-loop关于 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 标志的情况下运行该应用程序。

我的问题是,据我所知,专辑变量超出了循环的范围,为什么它在第一个循环结束后被释放?

【问题讨论】:

    标签: ios swift memory


    【解决方案1】:

    检查orderSummary.album 不是弱引用。如果是,则您在第 1 行初始化的 Album 将立即销毁,这将解释当您尝试设置 orderSummary.album.name[i] 时发生的崩溃。

    【讨论】:

    • 那行代码可能有误导性,我已经删除了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多