我在 iPhone 中制作了一个摄影应用程序,我有这 3 个类:ViewController、CaptureManager 和 ImgProcessor。
View Controller :
-(IBAction)takePic:(id)sender{
images = [captureManager takeMultipleImagesWithCompletion:^{
//Some UI related code..
[imgProcessor process:images];
}];
}
捕捉管理器:
-(NSArray *)takeMultipleImagesWithCompletion:^(void)completionHandler{
// take picture codes...
completionHandler();
return arrayOfImagesTaken;
}
到目前为止,它按预期工作:imgProcessor
处理由 captureManager
拍摄的图像。但我不太明白这是如何工作的。因为我在返回拍摄的图像数组之前调用了 completionHandler。这段代码是如何执行的?对此有更好的解决方案吗?
谢谢!
最佳答案
您不需要返回图像值。您可以将它作为 cmpletionHandler block 的参数传递。
-(void)takeMultipleImagesWithCompletion:(void (^)(NSArray *images))completionHnadler{
// take picture codes...
completionHnadler(arrayOfImagesTaken);
}
你可以这样调用它:
-(IBAction)takePic:(id)sender{
[captureManager takeMultipleImagesWithCompletion:^(NSArray *images){
[imgProcessor process:images];
}];
}
它是如何工作的?
这里的 block 用作回调,它定义了任务完成时要执行的代码。当 takeMultipleImagesWithCompletion 完成运行时, block completionHnadler 将被调用。
关于ios - Objective-C:方法的返回值和Completion block ,它们是如何执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21854497/