Skip to content

Commit aaf94be

Browse files
committed
fix: 🐛 update description of the lock of atomic
Closes: ChenYilong#103
1 parent 1bc9002 commit aaf94be

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

01《招聘一个靠谱的iOS》面试题参考答案/《招聘一个靠谱的iOS》面试题参考答案(上).md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,9 +407,9 @@ self.mutableArray = array;
407407

408408
第2条原因,如下:
409409

410-
> 该属性使用了自旋锁,会在创建时生成一些额外的代码用于帮助编写多线程程序,这会带来性能问题,通过声明 nonatomic 可以节省这些虽然很小但是不必要额外开销。
410+
> 该属性使用了互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。),会在创建时生成一些额外的代码用于帮助编写多线程程序,这会带来性能问题,通过声明 nonatomic 可以节省这些虽然很小但是不必要额外开销。
411411
412-
在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicity)。如果属性具备 nonatomic 特质,则不使用自旋锁。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的”(atomic))。
412+
在默认情况下,由编译器所合成的方法会通过锁定机制确保其原子性(atomicity)。如果属性具备 nonatomic 特质,则不使用互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。)。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的”(atomic))。
413413

414414
在iOS开发中,你会发现,几乎所有属性都声明为 nonatomic。
415415

@@ -1115,7 +1115,7 @@ NSObject *foo = [[NSObject alloc] init];
11151115
11161116
1. 原子性--- `nonatomic` 特质
11171117
1118-
在默认情况下,由编译器合成的方法会通过锁定机制确保其原子性(atomicity)。如果属性具备 nonatomic 特质,则不使用自旋锁。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的” ( atomic) ),但是仍然可以在属性特质中写明这一点,编译器不会报错。若是自己定义存取方法,那么就应该遵从与属性特质相符的原子性。
1118+
在默认情况下,由编译器合成的方法会通过锁定机制确保其原子性(atomicity)。如果属性具备 nonatomic 特质,则不使用互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。)。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的” ( atomic) ),但是仍然可以在属性特质中写明这一点,编译器不会报错。若是自己定义存取方法,那么就应该遵从与属性特质相符的原子性。
11191119
11201120
2. 读/写权限---`readwrite(读写)`、`readonly (只读)`
11211121
3. 内存管理语义---`assign`、`strong`、 `weak`、`unsafe_unretained`、`copy`
@@ -1156,7 +1156,7 @@ NSObject *foo = [[NSObject alloc] init];
11561156
11571157
11581158
注意:很多人会认为如果属性具备 nonatomic 特质,则不使用
1159-
“同步锁”。其实在属性设置方法中使用的是自旋锁,自旋锁相关代码如下
1159+
“同步锁”。其实在属性设置方法中使用的是互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。),互斥锁(atomic 的底层实现,老版本是自旋锁,iOS10开始是互斥锁--spinlock底层实现改变了。)相关代码如下
11601160
11611161
11621162
```Objective-C

0 commit comments

Comments
 (0)