以下是伪代码来帮助说明我的问题:
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
指针会发生什么? listing
指针不再位于dataSourceArray
中(它已被清除),因此remoteFileStorage
处理程序仍然可以安全地访问它吗?我的假设是listing
指针仍然指向内存中的有效地址,因为remoteFileStorage
闭包已经引用了它,但是我不确定吗?