首页 > 解决方案 > 类实例的内存访问

问题描述

考虑以下代码:

class ViewController: UIViewController {
 
    var dummy = DummyClass()
 
    
    override func viewDidLoad() {
        super.viewDidLoad()
        var copyDummy = dummy
        
        if (copyDummy === dummy){
            print("Same instance")
        }
        increment(&copyDummy)
       
    }
    
    func increment(_ number: inout DummyClass) {
        number.change += dummy.change

    }
}


class DummyClass {
    var change = 10
}

现在根据我的理解,copyDummy 和 dummy 都指向同一个内存位置。

当我调用func incrementusingincrement(&dummy)时,会出现运行时错误,因为我试图同时写入和读取相同的内存位置。

但是当我打电话时increment(&copyDummy)没有错误。

如果 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

标签: swiftclassmemorymemory-managementmemory-access

解决方案


推荐阅读