我正在使用AFNetworking。
我想手动更改baseURL。
+ (CustomHTTPClient*)sharedClient{
static dispatch_once_t pred;
static CustomHTTPClient *_sharedClient = nil;
NSLog(@"ShareClient %@",_sharedClient);
if (!_sharedClient)
{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[[NSUserDefaults standardUserDefaults]objectForKey:@"serverURL"]]];
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
}
else
{
NSLog(@"Delete ShareClient %@",_sharedClient);
_sharedClient = nil;
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[[NSUserDefaults standardUserDefaults]objectForKey:@"serverURL"]]];
NSLog(@"NEW ShareClient %@",_sharedClient);
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
}
return _sharedClient;
}
选项2:
+ (CustomHTTPClient*)sharedClient{
static dispatch_once_t pred;
static CustomHTTPClient *_sharedClient = nil;
dispatch_once(&pred, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[[NSUserDefaults standardUserDefaults]objectForKey:@"serverURL"]]];
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
});
return _sharedClient;
}
选项1:这将每次创建shareclient。因此它将始终使用正确的(新)BaseURL。 选项2:仅调用onces,因此BaseURL将始终相同。
Quation:使用选项1而不是选项2意味着什么?
我还检查了一些其他答案但想了解(简单来说)为什么要使用Dispatch_once以及如何让dispatch_once多次调用?
答案 0 :(得分:4)
如果您在基本URL之间切换,则每次初始化新管理器可能更容易,而不是使用共享管理器。使用共享管理器的许多好处都是单个静态基本URL。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"JSON: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
一次发送点就是只执行一次该块。
答案 1 :(得分:3)
您可以在班级中添加getter方法并返回不同的baseURL。 E.g。
+ (CustomHTTPClient*)sharedClient
{
static dispatch_once_t pred;
static CustomHTTPClient *_sharedClient = nil;
dispatch_once(&pred, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:[[NSUserDefaults standardUserDefaults]objectForKey:@"serverURL"]]];
[AFNetworkActivityIndicatorManager sharedManager].enabled = YES;
});
return _sharedClient;
}
- (NSURL *)baseURL
{
if (SOMETHING) {
return [[NSUserDefaults standardUserDefaults]objectForKey:@"serverURL"]];
} else {
return [[NSUserDefaults standardUserDefaults]objectForKey:@"anotherServerURL"]];
}
}