File tree Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Expand file tree Collapse file tree 1 file changed +4
-4
lines changed Original file line number Diff line number Diff 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
You can’t perform that action at this time.
0 commit comments