我真的很困惑 Obj-C 中的锁定是如何工作的。
我只是有一个网络请求,我只想同时调用一次。我想阻止对它的所有其他调用,直到它收到一些数据。
Mylock
是类型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];
}];