什么是Swift 4中的SWIFT_ENFORCE_EXCLUSIVE_ACCESS?

时间:2018-04-05 13:54:25

标签: swift

什么是对内存的独占访问权以及不同选项的含义是什么?

This proposal解释了这一点,但也许某人可以提供更简单的解释以及不同选择的实际影响/危险?

1 个答案:

答案 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