原子和非原子屬性

2022-08-20 06:57:10 字數 760 閱讀 4470

一、原子和非原子屬性

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等指令產生臨界...