首页 > 解决方案 > 被有效释放的闭包引用的指针会发生什么?

问题描述

以下是帮助演示我的问题的伪代码:

var dataSourceArray = [CustomClassObject]()

databaseListener { (data) in
    dataSourceArray.removeAll()

    let id = data.id
    let imageURL = data.imageURL
    let listing = CustomClassObject(id: id, image: nil)

    remoteFileStorage.getImage(url: imageURL) { (image) in
        listing.image = image
    }

    dataSourceArray.append(listing)
    tableView.reloadData()
}

databaseListener是一个实时数据库监听器,可以快速返回更新。在其完成处理程序中是一个下载图像的异步调用。如果databaseListener之前返回的新数据remoteFileStorage有机会从上次运行中返回,那么闭包中的listing指针会发生什么?指针不再有一个家remoteFileStorage(它刚刚被清除)所以处理程序可以安全地访问它吗?我的假设是指针仍然指向内存中的有效地址,因为闭包有对它的引用,但我不确定?listingdataSourceArrayremoteFileStoragelistingremoteFileStorage

标签: swift

解决方案


推荐阅读