1. 程式人生 > >iOS 開發 nonatomic 和 atomic

iOS 開發 nonatomic 和 atomic

nonatomic : 非原子屬性

atomic    : 原子屬性  如果不寫關鍵字 那麼預設就是 原子屬性

           - 多執行緒寫入屬性時,保證同一時間只有一個執行緒能夠執行寫入操作

           - 單(執行緒)寫多(執行緒)讀執行緒技術,同樣有可能出現"髒資料",重新讀一下

       - 效能較慢

執行緒安全

    在多個執行緒進行讀寫操作的時候,仍然能夠保證資料正確

UI執行緒(主執行緒) : 共同一個約定,所有更新UI的操作都在主執行緒上執行!

   原因:幾乎所有的UIKit 都不是執行緒安全的!"取捨"為了效能!

使用 atomic 的場景 寫入檔案時

    NSData * data ;
    //原子屬性 == YES  , 先把檔案儲存在一個臨時的檔案中,等全部寫入之後,再改名
    [data writeToFile:@"xxx.mp4" atomically:YES];

 實際上,原子屬性內部有一個鎖,自旋鎖

 自旋鎖 & 互斥鎖

 - 共同點:

    都能夠保證執行緒安全.

 - 不同點:

    互斥鎖:如果執行緒被鎖在外面,就會進入休眠狀態,等待鎖開啟,然後被喚醒!

    自旋鎖:如果執行緒被鎖在外面,就會用死迴圈的方式,一直等待鎖開啟!

 無論什麼鎖,都很消耗新能.效率不高