【问题标题】:Delay the return value instead of whole method延迟返回值而不是整个方法
【发布时间】:2013-02-28 05:49:02
【问题描述】:

是否可以只延迟返回值而不是整个方法,例如:

-(CGFloat)getValue
{
    // code implementation
    return floatvalue; // return float value with some delay.
}

【问题讨论】:

  • 这会有什么不同吗?如果是这样,那么您可以使用 sleep(10);如果 UIHang 不是问题。
  • 是的,它会根据我的需要
  • 是的,只需使用sleep(_timeInterval); 来延迟返回语句。我也想知道实现这样的代码需要什么?
  • 睡眠(_timeInterval);它的代码停止过程需要 timeInterval 秒然后运行您的方法
  • 所以调用方法也需要在这个延迟期间停止.. ?基本上停止了整个调用堆栈..?难道你不能在一些延迟之后在后台调用一个委托,这将继续执行吗?或者你也可以看看developer.apple.com/library/ios/#documentation/cocoa/Conceptual/…这可能会帮助你实现你想要的

标签: iphone objective-c xcode ipad


【解决方案1】:

使用块回调,返回值有延迟;

- (void)ayncGetValue:(void(^)(id value))returnBlock {

  dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, 10.f * NSEC_PER_SEC); // delay 10 seconds
  dispatch_after(popTime, dispatch_get_main_queue(), ^{
    returnBlock(@"hello block");
  });
}
// Usage
[obj ayncGetValue:^(id value) {
  // continue  
}];

【讨论】:

    【解决方案2】:

    你能做的是。将此功能保持为正常功能:

    -(void)getValue
    {
           // code implementation
           [self performSelector:@selector(returnData) withObject:nil afterDelay:0.5];
    }
    

    添加这个将返回数据的新函数:

    -(CGFloat)returnData
    {
           return floatvalue;
    }
    

    这里唯一重要的是你必须将 floatvalue 变量声明为类杠杆而不是函数杠杆。

    【讨论】:

      【解决方案3】:
      -(void)getValue
      {
      // code implementation
      
        [self performSelector:@selector(getValue:) withObject:value afterDelay:2];
      }
      
      -(CGFloat)getValue:(CGFloat *)float1
      {
        return float1;
      }
      

      【讨论】:

        猜你喜欢
        • 2013-11-29
        • 2018-06-13
        • 2017-09-09
        • 1970-01-01
        • 2012-10-18
        • 1970-01-01
        • 2017-11-24
        • 1970-01-01
        • 2021-10-17
        相关资源
        最近更新 更多