#import "ViewController.h"
@interface ViewController () /* 鎖 / @PRoperty(nonatomic,strong)NSObject * lockObjc; //nonatomic : 非原子屬性 /* 原子屬性 atomic : 原子屬性 如果不寫關(guān)鍵字 那么默認就是 原子屬性 - 多線程寫入屬性時,保證同一時間只有一個線程能夠執(zhí)行寫入操作 - 單(線程)寫多(線程)讀線程技術(shù),同樣有可能出現(xiàn)”臟數(shù)據(jù)”,重新讀一下
線程安全 在多個線程進行讀寫操作的時候,仍然能夠保證數(shù)據(jù)正確
UI線程(主線程) : 共同一個約定,所有更新UI的操作都在主線程上執(zhí)行! 原因:幾乎所有的UIKit 都不是線程安全的!”取舍”為了性能!
*/
@property(atomic,strong)NSObject * myAtomic;
@end
@implementation ViewController
/* 一下代碼模擬 Atomic 僅供參考!
OC 中定義屬性,通常會聲明一個 _成員變量 (這個功能是Xcode 的功能!) 如果你同時重寫了屬性的 getter & setter 方法, _成員變量,就不會自動生成!
@synthesize 合成指令, 在Xcode 4.5 之前用得非常多!Xcode 4.5 之前屬性不會自動生成 _成員變量 */
@synthesize myAtomic = _myAtomic; -(NSObject *)myAtomic { return _myAtomic; }
/** 實際上,原子屬性內(nèi)部就有一把鎖!! 自旋鎖 自旋鎖 & 互斥鎖
共同點 都能保證同一個時間點就只有一條線程訪問!不同點 互斥鎖:如果發(fā)現(xiàn)有其他線程正在執(zhí)行鎖定的代碼,線程就會進入睡眠狀態(tài),等待其他線程執(zhí)行完畢,打開鎖之后,線程就會被喚醒! 自旋鎖:如果發(fā)現(xiàn)有其他線程正在執(zhí)行鎖定的代碼,線程就會用死循環(huán)的方式,一直等待鎖定代碼執(zhí)行完畢! 自旋鎖更適合執(zhí)行非常短的代碼!
無論什么鎖,都是以”性能”作為代價來保證”安全” */
-(void)setMyAtomic:(NSObject *)myAtomic { @synchronized (self) { _myAtomic = myAtomic; } }
@end
新聞熱點
疑難解答