2012-04-17 29 views
2

我該如何取消performSelectorOnMainThread我如何取消performSelectorOnMainThread?

我有這樣的代碼:

myClass = [[MyClass alloc] init]; 

[myClass performSelectorOnMainThread:@selector(setupPlayer) withObject:nil waitUntilDone:YES]; 
+1

爲什麼downvotes?這是一個合法的問題。 – samvermette 2012-04-18 04:34:37

+0

感謝您的鼓勵! – Winston 2012-04-18 18:18:32

回答

2

如果你小心在您最初排隊的消息的線程,你可以通過在同一線程調用+ (void)cancelPreviousPerformRequestsWithTarget:(id)aTarget取消。以前的答案缺少一個重要的位:

您不能取消使用此方法排隊的郵件。如果您希望 選項取消當前線程上的消息,則必須使用 或者執行選擇器:withObject:afterDelay:或執行選擇器:withObject:afterDelay:inModes:方法。

+0

非常感謝您澄清! – Winston 2012-04-18 18:17:44

3

documentation

消息使用這種方法排隊,你們不能取消。

+0

謝謝指出。 – Winston 2012-04-17 19:40:06

+2

這個答案有誤導性;你可以通過在同一線程上調用cancelPreviousPerformRequestsWithTarget來取消排隊的消息。請參閱下面的答案。 – samvermette 2012-04-18 04:40:03

+0

@samvermette:如果目標和調用者都在同一個線程上,您可以取消消息。如果目標或調用者位於不同的線程上,您可以不**,這是OP要求的。 – 2012-04-18 12:07:23