我在iPhone上制作了一个摄影应用程序,我有这三个类:ViewController,CaptureManager和ImgProcessor。
的ViewController:
-(IBAction)takePic:(id)sender{
images = [captureManager takeMultipleImagesWithCompletion:^{
//Some UI related code..
[imgProcessor process:images];
}];
}
CaptureManager:
-(NSArray *)takeMultipleImagesWithCompletion:^(void)completionHandler{
// take picture codes...
completionHandler();
return arrayOfImagesTaken;
}
到目前为止,它可以按预期运行:imgProcessor
处理captureManager
拍摄的图像。但我不明白这是如何工作的。 Bcos我在返回拍摄的图像数组之前调用了completionHandler。这段代码是如何执行的?有更好的解决方案吗?
谢谢!
答案 0 :(得分:9)
您无需返回值图像。您可以将其作为cmpletionHandler块的参数传递。
-(void)takeMultipleImagesWithCompletion:(void (^)(NSArray *images))completionHnadler{
// take picture codes...
completionHnadler(arrayOfImagesTaken);
}
您可以这样称呼它:
-(IBAction)takePic:(id)sender{
[captureManager takeMultipleImagesWithCompletion:^(NSArray *images){
[imgProcessor process:images];
}];
}
它如何运作?
这里的块用作回调,它定义了任务完成时要执行的代码。当takeMultipleImagesWithCompletion完成运行时,将调用块completionHnadler。
答案 1 :(得分:0)
由于takeMultipleImagesWithCompletion
同步执行完成块,因此不需要完成块。它只能返回arrayOfImagesTaken
,并且调用者可以随意使用它。