24,Memory Safe,词汇调整
”专属访问权“ -> “访问独占权”
This commit is contained in:
@ -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 就会允许这种内存安全的行为。特别是当你遵循下面的原则时,它可以保证结构体属性的重叠访问是安全的:
|
||||||
|
|
||||||
* 你访问的是实例的存储属性,而不是计算属性或类的属性
|
* 你访问的是实例的存储属性,而不是计算属性或类的属性
|
||||||
* 结构体是本地变量的值,而非全局变量
|
* 结构体是本地变量的值,而非全局变量
|
||||||
|
|||||||
Reference in New Issue
Block a user