單詞解釋:
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方法;