Ios 当信号灯等待来自操作块的信号时,应用程序冻结
等待信号时信号量冻结我的应用程序Ios 当信号灯等待来自操作块的信号时,应用程序冻结,ios,iphone,objective-c,afnetworking,Ios,Iphone,Objective C,Afnetworking,等待信号时信号量冻结我的应用程序 -(void) procceddQueue { dispatch_queue_t queue_qu = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_semaphore_t sema_qu = dispatch_semaphore_create(0); dispatch_async(queue_qu, ^{ for (QueueItem *item
-(void) procceddQueue {
dispatch_queue_t queue_qu = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_semaphore_t sema_qu = dispatch_semaphore_create(0);
dispatch_async(queue_qu, ^{
for (QueueItem *item in self.queueItems) {
[[UploadService sharedInstance] buildPostRequestForItem:item :sema_qu];
}
});
dispatch_semaphore_wait(sema_qu, DISPATCH_TIME_FOREVER);
[self updateQueue];
[self.queueItems removeAllObjects];
}
我将信号sema_qu变量发送到另一个类中的操作块。
我正在使用AFNetworking,我不确定是否可以使用AFNetworking实现信号量。您是在buildPostRequestForItem::中发送信号量还是根本不发送信号量?例如,调度信号量信号(信号量);是这样的:发送信号量信号(sema_qu);为什么要在buildPostRequestForItem::中发送信号量,而不是在proceedQueue中?我对GCD没有太多经验,但我认为你的应用程序冻结了,因为你试图在另一个线程上发送信号;在proceedQueue中的for循环之后。这是我的第一个解决方案,但在这种情况下,信号量不等待信令。