2013-06-18 67 views
0

如何在延遲0.5秒後調用此方法- (void)displayView:(UIView *)view arg:(UILabel *)label { }Call Objective-C方法

我試過[self performSelector:@selector(displayView:) withObject:view afterDelay:.5];,但只通過查看作爲參數。

如何將兩個參數傳遞給延遲0.5秒的方法?

+0

這與Xcode根本無關。 – 2013-06-18 16:35:32

+3

順便說一下,將參數包含在字典中,然後繁榮,你從N個參數中取得了1個參數。 – 2013-06-18 16:35:54

+0

@ H2CO3對不起。好點子。我可能會嘗試。謝謝。 –

回答

6

使用延遲的塊調用:

主線程:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ 
    [self displayView:view arg:label]; 
}); 

後臺線程:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
    [self displayView:view arg:label]; 
}); 
+0

'dispatch_get_current_queue'已棄用。我試過這個。 –

+0

@亨利哈里斯:謝謝,修正。 – Regexident

+0

AHHHH我花了半小時試圖找出更新的方式來做到這一點!非常感謝! –

-2
- (id)performSelector:(SEL)aSelector 
      withObject:(id)anObject 
      withObject:(id)anotherObject 

Apple Documentation

[self performSelector:@selector(displayView:arg:) 
      withObject:myView 
      withObject:myLabel]; 

但我真的建議你GCD去:

另一種選擇是dispatch_after,這將需要一個塊,並在一定的時間排隊了。只要你需要,你可以否定這一計時器停止進程

myTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 
    target:self 
    selector:@selector(displayViewWitharg:) 
    userInfo:dict 
    repeats:NO]; 

// where dict is NSDictioary with key-value pair, which contains your parameters which you want to pass. 

在這裏:

double delayInSeconds = 5.0; 
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); 

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ 

    [self displayView:myView arg:myLabel]; 

}); 

另一種方式是使用NSTimer

希望這會幫助你

+0

我之前嘗試過'dispatch_after',並在'dispatch_get_main_queue();'上遇到了棄用警告。我相信。我不知道你做這件事的方式是否正確,但我可以嘗試。謝謝。 :) –

+0

我已經添加了3個不同的例子來在單獨的線程上運行一個進程。你可以根據你的可行性選擇其中的任何一種。 – Mrunal

+0

@Mrunal'performSelector:withObject:withObject'不在單獨的線程中運行 - 它是基於循環的(詳情請參閱NSRunLoop文檔)。另外,它沒有提供指定OP要求的.5秒延遲的方法。您的'NSTimer'示例具有誤導性。 'NSTimer'實例不能用自定義簽名調用方法;簽名必須是' - (void)methodName:(NSTimer *)timer'。 – jlehr