24,Memory Safe,词汇调整

”专属访问权“ -> “访问独占权”
This commit is contained in:
kemchenj
2017-09-29 17:52:36 +08:00
parent 68ea29968a
commit 495214b832

View File

@ -10,7 +10,7 @@
默认情况下Swift 会阻止你代码里不安全的行为。例如Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查。 默认情况下Swift 会阻止你代码里不安全的行为。例如Swift 会保证变量在使用之前就完成初始化,在内存被回收之后就无法被访问,并且数组的索引会做越界检查。
Swift 也保证同时访问同一块内存时不会冲突,通过约束代码里对于存储地址的写操作,去获取那一块内存的专属访问权。因为 Swift 自动管理内存,所以大部分时候你完全不需要考虑内存访问的事情。然而,理解潜在的冲突也是很重要的,可以避免你写出访问冲突的代码。而如果你的代码确实存在冲突,那在编译时或者运行时就会得到错误。 Swift 也保证同时访问同一块内存时不会冲突,通过约束代码里对于存储地址的写操作,去获取那一块内存的访问独占权。因为 Swift 自动管理内存,所以大部分时候你完全不需要考虑内存访问的事情。然而,理解潜在的冲突也是很重要的,可以避免你写出访问冲突的代码。而如果你的代码确实存在冲突,那在编译时或者运行时就会得到错误。
<a name="understanding_conflicting_access_to_memory"></a> <a name="understanding_conflicting_access_to_memory"></a>
## 理解内存访问冲突 ## 理解内存访问冲突
@ -202,7 +202,7 @@ func someFunction() {
上面的例子里,`oscar``health``energy` 都作为 in-out 参数传入了 `balance(_:_:)` 里。编译器可以保证内存安全,因为两个存储属性任何情况下都不会相互影响。 上面的例子里,`oscar``health``energy` 都作为 in-out 参数传入了 `balance(_:_:)` 里。编译器可以保证内存安全,因为两个存储属性任何情况下都不会相互影响。
限制结构体属性的重叠访问对于内存安全并不总是必要的。内存安全是必要的,但专属访问的要求比内存安全还要更严格 —— 意味着即使有些代码违反了专属访问的原则,也是内存安全的。如果编译器可以保证这种非专属的访问是安全的,那 Swift 就会允许这种内存安全的行为。特别是当你遵循下面的原则时,它可以保证结构体属性的重叠访问是安全的: 限制结构体属性的重叠访问对于内存安全并不总是必要的。内存安全是必要的,但访问独占权的要求比内存安全还要更严格 —— 意味着即使有些代码违反了访问独占权的原则,也是内存安全的。如果编译器可以保证这种非专属的访问是安全的,那 Swift 就会允许这种内存安全的行为。特别是当你遵循下面的原则时,它可以保证结构体属性的重叠访问是安全的:
* 你访问的是实例的存储属性,而不是计算属性或类的属性 * 你访问的是实例的存储属性,而不是计算属性或类的属性
* 结构体是本地变量的值,而非全局变量 * 结构体是本地变量的值,而非全局变量