AFNetworking更改基本网址

时间:2014-05-14 08:59:35

标签: ios afnetworking-2

我正在使用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多次调用?

changing AFNetworking baseURL

2 个答案:

答案 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"]];
    }
}