#import "WHObject.h" @interface WHObject() @property (nonatomic, strong) dispatch_queue_t dictQueue;//並發隊列 @property (nonatomic, strong) NSMutableDictionary *dict;//可變字典 @end @implementation WHObject - (instancetype)init { if(self = [super init]) { _dictQueue = dispatch_queue_create("com.huangwenhong.queue", DISPATCH_QUEUE_CONCURRENT); _dict = [NSMutableDictionary dictionary]; } return self; } - (void)huangwenhongmethod { self.target = [NSObject new]; } - (id)valueForKey:(NSString *)key { id __block obj; dispatch_sync(_dictQueue, ^{//因為有數據 return,所以這里是同步調用 obj = [self.dict valueForKey:key]; }); return obj; } - (void)setObject:(id)obj forKey:(id<NSCopying>)key { //重點:dispatch_barrier_async(),異步柵欄調用; //只有提交到並行隊列才有意義 dispatch_barrier_async(_dictQueue, ^{ [self.dict setObject:obj forKey:key]; }); } @end
總結:首先棧欄函數的作用,是執行到當前位置,前面的全部任務都要等待,等待block內部任務執行完成后,繼續執行其他任務。(面試時候的問題,用鎖不知道能不能實現)
