2013-02-04 36 views
0

另一種快速的一個:想知道如何使代碼等待塊用於別的東西來完成

如果我執行這樣的事情:

runningAnimation = YES; 
[self performSelector:@selector(animationsComplete) withObject:nil afterDelay:0.1[; 

// Return to main function 
-(void) mainFunction 
{ 
while (runningAnimation) 
{ 
continue; 
} 
} 

// And, animationsComplete looks like this: 
-(void) animationsComplete 
{ 
runningAnimation = NO; 
} 

的計劃似乎從來沒有走出while循環。 誰能告訴我爲什麼這是?

另一方面,如果這種類型的「等待我的代碼執行完某件事情」在我嘗試做的事情上不可能發揮作用,那麼還有另一種方法可以做同樣的事情嗎? 要暫停只是一個功能,而等待

[self performSelector:withObject:afterDelay:] 

調用來完成? 對不起,如果這似乎是一個業餘愛好者的問題。 我是一個業餘愛好者。

回答

0

這是因爲您的「performSelector:」發生在您當前的(主)線程上。

如果在該「while」循環內添加一條線,如「NSLog(@"in main function");」,只要performSelector啓動,它應該停止。

您需要在另一個(分離的)線程上執行performSelector,或者使用一個塊。 Some blocks can use "stop" Booleans在他們的論點。 withObject:afterDelay:

+0

所以,當我打電話performSelector -EXACTLY-發生了什麼先前存在的條件是,performSelector:方法被調用,調用performSelector方法:都在同一個主線程。程序執行是否到達performSelector:afterDelay:命令,然後繼續執行代碼?或者它是否停止,直到afterDelay:時間段過去?我覺得如果我理解 - 完全 - 在非常「接近金屬」級別發生了什麼,我將能夠更好地使用該命令...... –

0
WHILE (ANIMATIONCOMPLETE != 1) { 
... Do work ... 
... When work is done, like using if code... ... 
IF (SomeBoolean // That means work done == (0 for false, continue, 1 for true, break)) { 
BREAK; 
} 
ELSE { 
CONTINUE 
} 
} 
+0

因此,如果我從-inside-a while循環調用performSelector然後調用一個方法,使while循環條件停止執行,這將工作? –