2

次のようなメソッド全体ではなく、戻り値のみを遅延させることは可能ですか?

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

3 に答える 3

10

ブロックを使用して、遅延を伴う戻り値でコールバックします。

- (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  
}];
于 2013-02-28T06:02:04.940 に答える
1

あなたができることはです。この関数を通常の関数として保持します:

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

データを返す次の新しい関数を追加します。

-(CGFloat)returnData
{
       return floatvalue;
}

ここで唯一重要なことは、floatvalue 変数を関数レバーではなくクラス レバーとして宣言する必要があることです。

于 2013-02-28T05:55:34.970 に答える
-1
-(void)getValue
{
// code implementation

  [self performSelector:@selector(getValue:) withObject:value afterDelay:2];
}

-(CGFloat)getValue:(CGFloat *)float1
{
  return float1;
}
于 2013-02-28T05:57:22.737 に答える