swift - 被有效释放的闭包引用的指针会发生什么?
问题描述
以下是帮助演示我的问题的伪代码:
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
解决方案
推荐阅读
- html - CSS 位置:绝对不能在 IE11 上正确显示
- python - Altair 图表上方的动态文本
- android - EditText 在 Android Studio 中隐藏屏幕
- javascript - 如何在 HTML 图像上绘制 p5.js 圆圈
- google-cloud-firestore - Google Firestore - 搜索数组中存在的多个项目(和操作)
- java - 查看没有嵌套循环的类 Arraylist 对象
- javascript - 从缓存中清除多个 html 和 js 文件
- makefile - GNU Make:如何使具有多个触发器的规则在并行模式下运行一次?
- reactjs - 由 Service Worker 提供服务时,JS 文件中缺少 CSP 标头(而 CSS 没有)
- c# - MySQL Parameters.AddWithValue 在 c# 中失败/不起作用