如何在Delay之后调用返回类型为BOOL的方法?

时间:2015-04-06 06:56:32

标签: ios delay

我有三个条件要实施如下,

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;
   }
}

如何在延迟后将BOOL值作为返回类型?

4 个答案:

答案 0 :(得分:3)

我能想到的最简单的方法是使用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

}];

请注意提供的有关块的文档,以及如何避免它们的内存问题。

答案 1 :(得分:0)

您可以添加如下代码:

dispatch_time_t x = dispatch_time(DISPATCH_TIME_NOW, 10.f * NSEC_PER_SEC);

所以这会使它延迟10秒。

答案 2 :(得分:0)

你可以使用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;
   }
}

答案 3 :(得分:0)

您可以使用倒数计时器,这样就不会影响您的用户界面,延迟后,它会在onFnished上调用您的方法“callYourBooleabMethod()”。

      new CountDownTimer(DELAY,Interval) {
            @Override
            public void onTick(long millisUntilFinished) {

            }

            @Override
            public void onFinish() {
                callYourBooleabMethod();
            }
        }.start();