如果我在两个UIViewControllers中同时调用[[RKClient sharedClient] get @“foo.xml”delegate:self]会怎么样?

时间:2011-11-19 09:23:17

标签: ios uiviewcontroller restkit

如果我在两个UIViewControllers中同时调用[[RKClient sharedClient] get @“foo.xml”delegate:self]会怎么样?我有什么问题吗?

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

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

2 个答案:

答案 0 :(得分:1)

如果您查看get:delegate:的RKClient实现,它只需执行此操作

- (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:本身是异步的,所以这个东西无论如何都会在后台发生。

答案 1 :(得分:0)

我猜这两个不同的调用将在两个不同的线程上。有了这个说没有问题应该发生,系统应该能够解决这个过程,但是我不确定会回到'第一'。

总而言之,只要[RKClient sharedClient]处的对象是线程安全的(除非另有说明,大多数对象似乎都是如此)不应该找到任何问题