2013-02-28 50 views
2

是否有可能延遲僅返回值,而不是整個方法,如:延遲的返回值,而不是整個方法

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

請問這有什麼區別?如果是這樣,那麼你可以使用睡眠(10);如果UIHang不是一個問題。 – rptwsthi 2013-02-28 05:51:37

+0

是的,它會根據我的需要 – KDeogharkar 2013-02-28 05:52:14

+0

yup只是使用'sleep(_timeInterval);'來延遲返回語句。我也想知道需要實現這樣的代碼是什麼? – Sagrian 2013-02-28 05:56:08

回答

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 
}]; 
+0

WOW .... !!!! +1。 – Rushi 2013-02-28 06:05:27

+0

謝謝@Fourj這很有幫助 – KDeogharkar 2013-02-28 06:06:29

+0

+1爲好的答案,很好解決。 – 2013-02-28 06:57:01

1

你可以做的是。保持這個功能正常功能:

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

添加新的功能,這將返回數據:

-(CGFloat)returnData 
{ 
     return floatvalue; 
} 

這裏唯一重要的事情將是你必須聲明的floatValue變量,類槓桿,而不是功能槓桿。

-1
-(void)getValue 
{ 
// code implementation 

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

-(CGFloat)getValue:(CGFloat *)float1 
{ 
    return float1; 
}