- (NSDictionary *)HTTPRequestHeaders {
NSDictionary __block *value;
dispatch_sync(self.requestHeaderModificationQueue, ^{
value = [NSDictionary dictionaryWithDictionary:self.mutableHTTPRequestHeaders];
});
return value;
}
- (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;
}
1、在AFNetworking中,dispatch_barrier_async用来保证写线程的安全性,;以上面self.mutableHTTPRequestHeader 为例,通过<span style="font-family: Arial, Helvetica, sans-serif;">dispatch_barrier_async,能保证每次写</span><span style="font-family: Arial, Helvetica, sans-serif;">self.mutableHTTPRequestHeader时,没有线程在读</span><span style="font-family: Arial, Helvetica, sans-serif;">self.mutableHTTPRequestHeader;同时,写入</span><span style="font-family: Arial, Helvetica, sans-serif;">self.mutableHTTPRequestHeader时是在子线程中写的</span><span style="font-family: Arial, Helvetica, sans-serif;">
</span><span style="font-family:Arial, Helvetica, sans-serif;">2、</span><span style="font-family: Arial, Helvetica, sans-serif;">self.requestHeaderModificationQueue是一个并发队列,</span><span style="font-family: Arial, Helvetica, sans-serif;">dispatch_sync(self.requestHeaderModificationQueue, 实现多线程读取同一个变量,又能保证同步获取到数据</span>
本文介绍了AFNetworking中如何利用GCD确保HTTP头部字段的线程安全操作,包括读写请求头信息的方法,并解释了dispatch_barrier_async和dispatch_sync的作用。
1369

被折叠的 条评论
为什么被折叠?



