nonatomic : 非原子屬性 atomic : 原子屬性 如果不寫關鍵字 那麼預設就是 原子屬性 - 多線程寫入屬性時,保證同一時間只有一個線程能夠執行寫入操作 - 單(線程)寫多(線程)讀線程技術,同樣有可能出現"臟數據",重新讀一下 - 性能較慢 線程安全 在多個線程進行讀寫操作的時候,仍 ...
nonatomic : 非原子屬性
atomic : 原子屬性 如果不寫關鍵字 那麼預設就是 原子屬性
- 多線程寫入屬性時,保證同一時間只有一個線程能夠執行寫入操作
- 單(線程)寫多(線程)讀線程技術,同樣有可能出現"臟數據",重新讀一下
- 性能較慢
線程安全
在多個線程進行讀寫操作的時候,仍然能夠保證數據正確
UI線程(主線程) : 共同一個約定,所有更新UI的操作都在主線程上執行!
原因:幾乎所有的UIKit 都不是線程安全的!"取捨"為了性能!
使用 atomic 的場景 寫入文件時
NSData * data ; //原子屬性 == YES , 先把文件保存在一個臨時的文件中,等全部寫入之後,再改名 [data writeToFile:@"xxx.mp4" atomically:YES];
實際上,原子屬性內部有一個鎖,自旋鎖
自旋鎖 & 互斥鎖
- 共同點:
都能夠保證線程安全.
- 不同點:
互斥鎖:如果線程被鎖在外面,就會進入休眠狀態,等待鎖打開,然後被喚醒!
自旋鎖:如果線程被鎖在外面,就會用死迴圈的方式,一直等待鎖打開!
無論什麼鎖,都很消耗新能.效率不高