一、原子和非原子屬性
1. oc在定義屬性時有nonatomic和atomic兩種選擇:
atomic:原子屬性,為setter方法加鎖(預設就是atomic);
nonatomic:非原子屬性,不會為setter方法加鎖。
2. nonatomic和atomic的對比
atomic:執行緒安全,需要消耗大量的資源;
nonatomic:非執行緒安全,適合記憶體小的移動裝置。
3. ios開發的建議
所有屬性都宣告為nonatomic。
盡量避免多執行緒搶奪同一塊資源。
盡量將加鎖、資源搶奪的業務邏輯交給伺服器端處理,減小移動客戶端的壓力。
二、互斥鎖&自旋鎖
互斥鎖:
如果發現其他執行緒正在執行鎖定**,執行緒會進入休眠(就緒狀態),等其它執行緒時間片到開啟鎖後,執行緒會被喚醒(執行)。
自旋鎖:
如果發現有其它執行緒正在鎖定**,執行緒會用死迴圈的方式,一直等待鎖定的**執行完成,自旋鎖更適合執行不耗時的**。
//nonatomic 非原子性,getter setter
方法都不加鎖,多個執行緒都可以訪問
//atomic 原子性,內部有一把鎖,鎖的是賦值的setter方法,讀取操作沒有上鎖
//自旋鎖
@property(atomic,strong)
nsobject*obj2;
//模擬原子屬性
- (void)setobj2:(nsobject *)obj2
}
1 原子屬性和非原子屬性
1.原子屬性和非原子屬性 oc在定義屬性時有 atomic 和 nonatomic 兩種選擇 atomic 預設屬性 原子屬性,自動為setter 方法加鎖 執行緒安全的,需要消耗大量的 cpu 資源 nonatomic 非原子屬性,不會為 setter 方法加鎖 非執行緒安全的,適合記憶體小的移動...
Objective C 原子屬性
objective c 在宣告乙個屬性的時候,想必大家都是不用經過大腦思考就會寫 property nonatomic,我們都知道屬性可以是 nonatomic 也可以使 atomic 的,但是好像幾乎所有屬性在宣告的時候 nonatomic,atomic 的屬性幾乎沒出現過。atomic 修飾符彷...
原子性atomic與非原子性natomic
原子操作是不可分割的操作,在原子操作執行完畢之前,其不會被任何其它任務或事件中斷。在單處理器系統 uniprocessor 中,能夠在單條指令中完成的操作都可以認為是 原子操作 因為中斷只能發生於指令之間。某些cpu指令系統中引入了test and set test and clear等指令產生臨界...