swift - 类实例的内存访问
问题描述
考虑以下代码:
class ViewController: UIViewController {
var dummy = DummyClass()
override func viewDidLoad() {
super.viewDidLoad()
var copyDummy = dummy
if (copyDummy === dummy){
print("Same instance")
}
increment(©Dummy)
}
func increment(_ number: inout DummyClass) {
number.change += dummy.change
}
}
class DummyClass {
var change = 10
}
现在根据我的理解,copyDummy 和 dummy 都指向同一个内存位置。
当我调用func increment
usingincrement(&dummy)
时,会出现运行时错误,因为我试图同时写入和读取相同的内存位置。
但是当我打电话时increment(©Dummy)
没有错误。
如果 copyDummy 也访问与虚拟变量相同的内存位置,为什么会出现这种行为?
抱歉,如果这变成一个非常基本的问题和/或我的理解不正确。很长一段时间以来,我一直在努力解决这个问题。
提前致谢!
根据有用的建议修改代码:
class ViewController: UIViewController {
var dummy = DummyClass()
override func viewDidLoad() {
super.viewDidLoad()
increment(dummy)
}
func increment(_ number: DummyClass) {
number.change += dummy.change
}
}
class DummyClass {
var change = 10
}
不是函数增量写入相同的内存位置,即。numbers.change
从那里也阅读即。dummy.change
解决方案
推荐阅读
- java - 通过 native-image 编译 Spring Boot 应用程序
- python - 我应该如何解决错误_tkinter.TclError:无法打开“sample.png”:没有这样的文件或目录
- vb.net - devExpress searchLookupEdit 没有设置值
- github-enterprise - in the github enterprise UI, is there a way to see commit statuses outside of the PR context?
- java - 如何在 Java 字符串中编码 unicode 字符,如 \u0022 和 \u005c(\ 和“)?
- yaml - 在yaml中预先声明一个排除的锚标头?
- python - 计算networkx图中开放三角形的数量
- node.js - 你能帮我解决这个 nginx 配置,让它与 https 中的域一起工作吗?
- twilio - 从 Twilio 函数调用的 Twilio 验证返回未找到资源
- python-3.x - 如何在 sklearn 中使用 gower 距离实现 pam 聚类算法?