gpt4 book ai didi

ios - 在同一方法中的语句之前异步执行一个 block

转载 作者:行者123 更新时间:2023-11-29 01:08:40 26 4
gpt4 key购买 nike

如何在同一方法的语句之前异步执行一个 block ?

返回总是在 block 之前执行,但如果提交总是等于否。

我希望 block 在返回之前执行。我该怎么做?我尝试 dispatch_semaphore_tcheckVerifyCode 在主线程中。我不能阻止主线程。

-(BOOL)checkVerifyCode
{
__block BOOL commit = NO;
[SMSSDK commitVerificationCode:self.verificationNum.text phoneNumber:self.phoneNumber.text zone:@"86" result:^(NSError *error) {
if (error) {
NSString *errInfo = [error.userInfo objectForKey:@"commitVerificationCode"];
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
[hud setMode:MBProgressHUDModeText];
[hud setLabelText:@"验证码输入错误"];
[hud setLabelText:errInfo];

hud.color = [UIColor clearColor];
hud.labelColor = [UIColor colorWithRed:118/255.f green:214/255.f blue:255/255.f alpha:0.8f];
hud.detailsLabelColor = [UIColor colorWithRed:118/255.f green:214/255.f blue:255/255.f alpha:0.8f];
hud.margin = 10.f;
hud.yOffset = -100.f;
hud.removeFromSuperViewOnHide = YES;
[hud hide:YES afterDelay:3];
NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:commit] forKey:@"bool"];
[self performSelectorOnMainThread:@selector(setCommit:) withObject:dict waitUntilDone:NO];

}else
{
NSDictionary *dict = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:commit] forKey:@"bool"];
[self performSelectorOnMainThread:@selector(setCommit:) withObject:dict waitUntilDone:NO];
commit = YES;
}
}];
return commit;

}

最佳答案

您实际上是在要求使异步方法同步。由于您对 checkVerifyCode 方法的调用是在主线程上进行的,因此这将需要阻塞主线程(如前所述,这是个坏主意)。

相反,您应该在某处使用一些方法,您可以调用这些方法来根据异步方法的结果进行更新。

即:

  • 设置进度指示器和一个显示“正在检查您的代码”的字段
  • 修改checkVerifyCode返回void
  • 在异步调用结束时,在某处调用一些方法:

_

 [self _checkVerifyDone:commit];

而且,如果您真的需要在主队列中使用它:

dispatch_async(dispatch_get_main_queue(), ^{
[self _checkVerifyDone:commit];
});

关于ios - 在同一方法中的语句之前异步执行一个 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36018089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com