如何在延迟后调用 return 类型为 BOOL 的方法?
How to call a method with return type as BOOL after Delay?
我有3个条件要实现如下,
if(condition 1)
{
return true;
}
else
{
if(condition 2 )
{
//after 10 sec delay call condition 3 which will return BOOL value
retutn that BOOL value after 10 sec
}
else
{
return false;
}
}
延迟后如何获取 return 类型的 BOOL 值?
您可以添加这样的代码:
dispatch_time_t x = dispatch_time(DISPATCH_TIME_NOW, 10.f * NSEC_PER_SEC);
所以这会延迟 10 秒。
我能想到的最简单的方法是使用blocks。像这样声明方法:
-(void)methodWithDelay:(void(^)(BOOL result))aCompletion
{
if(condition 1)
{
aCompletion(YES);
}
else
{
if(condition 2 )
{
//after 10 sec delay call condition 3 which will return BOOL value
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
aCompletion(YES/NO);
});
}
else
{
aCompletion(NO);
}
}
}
然后像这样使用它:
[self methodWithDelay:^(BOOL result) {
//do what you want with the result
}];
请注意提供的关于块的文档,以及如何避免它们的内存问题。
您可以 return 使用 GCD API dispatch_after 一些延迟后的 BOOL,它需要延迟时间、队列并有一个完成处理程序,您可以在其中执行代码需要在指定的延迟时间结束后执行。
敌人的例子-
if(condition 1)
{
return true;
}
else
{
if(condition 2 )
{
//after 10 sec delay call condition 3 which will return BOOL value
//retutn that BOOL value after 10 sec
double delayInSeconds = 10.0;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){
return YES;//return NO;
});
}
else
{
return false;
}
}
您可以使用倒数计时器,这样它就不会影响您的 UI,延迟后,它会在 onFnished 上调用您的方法 "callYourBooleabMethod()"。
new CountDownTimer(DELAY,Interval) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
callYourBooleabMethod();
}
}.start();
我有3个条件要实现如下,
if(condition 1)
{
return true;
}
else
{
if(condition 2 )
{
//after 10 sec delay call condition 3 which will return BOOL value
retutn that BOOL value after 10 sec
}
else
{
return false;
}
}
延迟后如何获取 return 类型的 BOOL 值?
您可以添加这样的代码:
dispatch_time_t x = dispatch_time(DISPATCH_TIME_NOW, 10.f * NSEC_PER_SEC);
所以这会延迟 10 秒。
我能想到的最简单的方法是使用blocks。像这样声明方法:
-(void)methodWithDelay:(void(^)(BOOL result))aCompletion
{
if(condition 1)
{
aCompletion(YES);
}
else
{
if(condition 2 )
{
//after 10 sec delay call condition 3 which will return BOOL value
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10.f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
aCompletion(YES/NO);
});
}
else
{
aCompletion(NO);
}
}
}
然后像这样使用它:
[self methodWithDelay:^(BOOL result) {
//do what you want with the result
}];
请注意提供的关于块的文档,以及如何避免它们的内存问题。
您可以 return 使用 GCD API dispatch_after 一些延迟后的 BOOL,它需要延迟时间、队列并有一个完成处理程序,您可以在其中执行代码需要在指定的延迟时间结束后执行。
敌人的例子-
if(condition 1)
{
return true;
}
else
{
if(condition 2 )
{
//after 10 sec delay call condition 3 which will return BOOL value
//retutn that BOOL value after 10 sec
double delayInSeconds = 10.0;
dispatch_time_t delayTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(delayTime, dispatch_get_main_queue(), ^(void){
return YES;//return NO;
});
}
else
{
return false;
}
}
您可以使用倒数计时器,这样它就不会影响您的 UI,延迟后,它会在 onFnished 上调用您的方法 "callYourBooleabMethod()"。
new CountDownTimer(DELAY,Interval) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
callYourBooleabMethod();
}
}.start();