Что будет, если я вызову одновременно [[RKClient sharedClient] get @ "foo.xml" делегат: self] в двух UIViewControllers? - PullRequest
0 голосов
/ 19 ноября 2011

Что будет, если я вызову одновременно [[RKClient sharedClient] get @ "foo.xml" делегат: self] в двух UIViewControllers? У меня есть проблемы?

viewController_A
{
[[RKClient sharedClient] get:@"foo.xml" delegate:self];
}

viewController_B
{
 [[RKClient sharedClient] get:@"foo.xml" delegate:self];
}

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Если вы посмотрите на реализацию RKClient для get:delegate:, она просто сделает это

- (RKRequest *)get:(NSString *)resourcePath delegate:(id)delegate {
    return [self load:resourcePath method:RKRequestMethodGET params:nil delegate:delegate];
}

и реализация для load:method:params:delegate: равна

- (RKRequest *)load:(NSString *)resourcePath method:(RKRequestMethod)method params:(NSObject<RKRequestSerializable> *)params delegate:(id)delegate {
    NSURL* resourcePathURL = nil;
    if (method == RKRequestMethodGET) {
        resourcePathURL = [self URLForResourcePath:resourcePath queryParams:(NSDictionary*)params];
    } else {
        resourcePathURL = [self URLForResourcePath:resourcePath];
    }
    RKRequest *request = [[RKRequest alloc] initWithURL:resourcePathURL delegate:delegate];
    [self setupRequest:request];
    [request autorelease];
    request.method = method;
    if (method != RKRequestMethodGET) {
        request.params = params;
    }

    [request send];

    return request;
}

Он не использует данные о состоянии / общем доступе RKClient, поэтому вы не увидите проблемы. Метод get: Delegate: сам по себе асинхронный, поэтому все это будет происходить в фоновом режиме.

0 голосов
/ 27 ноября 2011

Я предполагаю, что два разных вызова будут в двух разных потоках.С учетом вышесказанного никаких проблем не должно возникнуть, система должна быть в состоянии разобраться в процессе, однако я не уверен, что вернется «первым».

Таким образом, в заключение, пока объект в [RKClient sharedClient] является потокобезопасным (что, как представляется, большинство объектов, если не указано иное), проблем не должно быть найдено

...