atomic
用於保證屬性setter
、getter
的原子性操做,至關於在getter
和setter
內部加了線程同步的鎖
- 能夠參考源碼
objc4
的objc-accessors.mm
- 它並不能保證使用屬性的過程是線程安全的
1、原子鎖是什麼意思
int a = 10; // 1
int b = 20; // 2
int c = a + b; // 3
複製代碼
- 這三句代碼, 若是被多線程訪問, 那麼就有可能有三條線程分別同時訪問這三句代碼
- 原子鎖的意思就是, 將這三句代碼在同一時間只能有一條線程能夠訪問
// 加鎖
int a = 10; // 1
int b = 20; // 2
int c = a + b; // 3
// 解鎖
複製代碼
2、查看atomic修飾的屬性底層代碼
- 下面的代碼就是給屬性賦值的底層實現, 全都調用了
reallySetProperty
函數
- 進入
reallySetProperty
函數, 能夠看到賦值的先後, 若是是atomic
修飾, 那麼就會加上原子鎖
- 查看
getter
的底層實現, 能夠看到取值的先後, 若是是atomic
修飾, 那麼就會加上原子鎖
- 原子鎖只能保證
setter
和getter
內部的區域是安全的, 可是外部使用的時候就沒辦法保證
3、查看原子鎖的底層結構