一,創(chuàng)建一個(gè)串行的GCD隊(duì)列
二,用GCD欄柵函數(shù)dispatch_barrier_async和dispatch_barrier_sync
因?yàn)樽x取是并發(fā)的并且同步的因?yàn)樾枰R上得到返回的結(jié)果 ,寫必須是單獨(dú)執(zhí)行的。柵欄函數(shù)的作用是分割函數(shù)執(zhí)行,只有執(zhí)行完?yáng)艡诤瘮?shù)以后才可以執(zhí)行后面的任務(wù),利用這個(gè)特點(diǎn),可以把寫操作放在柵欄函數(shù)里,這樣等數(shù)據(jù)修改完以后才可以讀取。保證了線程安全。
- (void)setValue:(NSString *)value
forHTTPHeaderField:(NSString *)field
{
dispatch_barrier_async(self.requestHeaderModificationQueue, ^{
[self.mutableHTTPRequestHeaders setValue:value forKey:field];
});
}
- (NSString *)valueForHTTPHeaderField:(NSString *)field {
NSString __block *value;
dispatch_sync(self.requestHeaderModificationQueue, ^{
value = [self.mutableHTTPRequestHeaders valueForKey:field];
});
return value;
}