1
我真的很困惑如何在Obj-C中锁定工作。用Obj-C锁定
我只是有一个网络请求,我只想同时调用一次。我想阻止所有其他呼叫,直到它收到一些数据。
我的lock
类型为NSCondition
和static,_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];
}];
您不应该在'-wait'周围放置一个while循环。 – 2013-05-02 23:03:29
我是一个真正的小白,所以对不起,如果我不明白。我只是试图删除while语句。但这只是让我的代码冻结。我应该改变更多的顺序吗? – 2013-05-02 23:10:25
您不能对单线程异步API使用这种锁定。第二个传入的请求会在线程等待获取锁时阻止该线程,从而阻止执行成功/失败响应处理程序。 – Darren 2013-05-03 00:16:15