使用Obj-C锁定

时间:2013-05-02 22:58:54

标签: ios objective-c multithreading

我真的很困惑Obj-C中锁定是如何工作的。

我只是有一个网络请求,我只想同时调用一次。我想阻止所有其他调用,直到它收到一些数据。

我的lock属于NSCondition类型而静态,_sending只是一个布尔。这是我的实施。 getWithSuccess正在使用AFNetworking来执行某些操作网络请求,因此我认为它可以启动多个线程或在GDC中使用一些魔法。

我的问题是这个实现只是给了我死锁,我需要一些暗示正确的实现应该如何工作。

[lock lock];

while (_sending)
    [lock wait];

_sending = YES;

[self getWithSuccess:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
    _sending = NO;

    [lock signal];
    [lock unlock];


} fail:^() {
    _sending = NO;

    [lock signal];
    [lock unlock];
}];

1 个答案:

答案 0 :(得分:1)

我使用NSOperationNSOperationQueue完成了类似的操作。根据您的需要,您可以继承NSOperation并在添加新类型之前检查该类型的操作是否在队列中(以防止重复调用)或仅将您的网络请求放入队列中它们将在通过将maxConcurrentOperationCount设置为1

,一次一个

你提到你正在使用AFNetworking,它有一个名为AFURLConnectionOperation的NSOperation子类,可能也适合你的需要。