由于等待,dispatch_semaphore_signal从不被执行

我想拍两张照片,并希望它们按顺序运行。 捕获图片的方法是使用asynchronous运行的方法完成的。 我目前使用信号量试图同步这个,但它停止运行的程序。 我相信这是因为completionHandler在同一个线程上运行,并且由于线程被locking,它不能执行释放信号量。 这是我现在的代码:

camera_sema = dispatch_semaphore_create(0); [photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error) { [flash turnOffFlash];//turning off flash for second picture //perform needed work dispatch_semaphore_signal(camera_sema); }]; dispatch_semaphore_wait(camera_sema, DISPATCH_TIME_FOREVER); 

有没有一种方法,我可以使用dispatch_async这种情况下,或者在另一个后台线程上运行completionHandler的方式,以便能够执行?

更新1:这工作,但不知道,如果它是最好的办法做到这一点。

 -(void*)method: (int) iteration { [photoOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler:^(CMSampleBufferRef imageSampleBuffer, NSError *error) { [flash turnOffFlash];//turning off flash for second picture //perform needed work //base case [method: iteration-1]; }]; } 

所以基本上我recursion地调用这个方法来确保它只在callback达到时才重复。 它将基本上同步运行一个asynchronous任务。 不幸的是,对于最终的devise,我需要能够无限地运行它。 做这个recursion将失败。 请让我知道是否有更好的方法来做到这一点。