sem = dispatch_semaphore_create(0);
// called by NSOperationQueue
-(void)waitFromUI
{
NSLog(@"%@", [NSThread currentThread]); //<NSThread: 0x60000007d7c0>{number = 3, name = (null)}
NSLog(@"%ld",dispatch_semaphore_wait(sem, DISPATCH_TIME_FOREVER));
}
// called by UI Button click
-(void)responseFromUI:(BOOL)response
{
NSLog(@"%@", [NSThread currentThread]); //<NSThread: 0x600000060840>{number = 1, name = main}
dispatch_semaphore_signal(sem);
}
请参阅代码,工作流程在NSOperation块中首先waitFromUI
,然后在此块中按performSelectorOnMainThread
显示用户界面,然后点击此用户界面中的按钮以调用responseFromUI
。
函数dispatch_semaphore_wait
在我调用dispatch_semaphore_signal
后没有结束,它会永远等待并阻塞我的主线程。
任何人都知道我的代码是什么问题。