屬性修飾詞nonatomic和atomic的區(qū)別——2022-08-14

單詞解釋:

atom:原子
atomic:原子性的
nonatomic:非原子性的

結論:

1、atomic用于保證屬性getter、setter的原子性操作,相當于是在getter、setter內部加了線程同步的鎖
2、atomic并不能保證使用屬性的過程是線程安全的。

解釋1:

給屬性加上atomic修飾,可以保證屬性的setter和getter都是原子性操作,也就是保證setter和getter內部是線程同步的。相當于是給屬性的setter和getter一個加鎖解鎖的操作。

原子性操作:理解為不可分割的整體

int a = 1;
int b = 2;
int c = a + b;

假如以上三行代碼是原子性操作,在多線程環(huán)境下運行,在某一線程執(zhí)行到該代碼時,那就要求三行代碼執(zhí)行完,才算真的執(zhí)行完,別的線程才能進入執(zhí)行。

atomic屬性如圖,在setter和getter內部會有加鎖/解鎖的操作:


image.png

解釋2:

image.png

如圖中ViewController的data屬性是atomic修飾的,所以保證了data屬性getter、setter原子性操作,線程安全。但是[self.data addObject:@"1"];里的addObject操作并不能保證,如需保證線程安全,則需要在addObject前后加解鎖操作。

解釋3:

nonatomic屬性就是非原子性操作、非線程安全的

iOS中不使用atomic的原因:
1、atomic太耗性能,iOS中會經常會對屬性進行getter和setter操作,再加上iOS的內存也不多,使用atomic會很浪費內存資源;
2、大部分情況下,不會出現(xiàn)多條線程同時去調用一個對象的getter或setter方法;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容