什么是对内存的独占访问权以及不同选项的含义是什么?
This proposal解释了这一点,但也许某人可以提供更简单的解释以及不同选择的实际影响/危险?
答案 0 :(得分:1)
独占访问是一种防止同时多次访问同一内存地址的策略。
以下不是冲突,因为x在一瞬间被读取,而在另一时刻被改变。
var x: String = "Hello,"
x = x + " world!"
但是,请考虑一下:
extension String {
mutating func replace(_ function: () -> String) {
self = function()
}
}
var x: String = "Hello,"
x.replace { x + " world!" }
变异函数对变量进行写访问,闭包捕获在写入时尝试读取的变量,这违反了独占内存访问。
因此编译器标志会在它捕获你这样做时出现错误,以阻止你犯错误。 (错误是因为行为未定义)
阅读更多内容"冲突访问属性":https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/MemorySafety.html#//apple_ref/doc/uid/TP40014097-CH46-ID571