2010-05-19 46 views

回答

4

嘗試把你變回代碼的方法,並從變化的方法調用:

[self performSelector:@selector(changeBack:) withObject:nil afterDelay:1.0]; 
+0

有沒有辦法將2個對象傳遞給選擇器的參數?我發現一個與2的對象:'s,但沒有延遲後的那一個。 – marty 2010-05-19 11:34:02

+0

@marty:將兩個對象添加到NSArray並將NSArray作爲對象傳遞。 – dreamlax 2010-05-19 12:10:18

+0

我更喜歡使用字典,因爲它可以很容易地擴展到任意數量的命名參數,比數組更具可讀性/可維護性。 – 2010-05-19 13:25:54

1

您可以撥打

// sleep first appeared in Version 7 UNIX, 1979 
sleep(1); 

或者,更現代:

// usleep appeared in 4.3 BSD, released 1986 
usleep(1000000); 

或者,再次更簡單地:

// nanosleep can be found in POSIX.1b, published 1993 
struct timespec ts; 
ts.tv_sec = 1; 
nanosleep(&ts, NULL); 

或者,更現代,更可可-Y:

// +sleepForTimeInterval first appeared in Mac OS X 10.5, 2007 
[NSThread sleepForTimeInterval:1.0]; 

所有這些都將暫停當前線程。如果你的應用程序只有一個線程,那麼這意味着它會停止你的整個應用程序。它將在睡眠期間對任何用戶界面事件無響應。

NSObject參考顯示了一種名爲performSelector:withObject:afterDelay:的方法。該方法通過在運行循環中調度指定延遲後執行選擇器。這意味着運行循環會繼續循環並處理事件,消耗定時器,排空自動釋放池,發送更多預定消息等等。

在這種特殊情況下,最好在運行循環中調度選擇器(提供更改圖像並提供一秒延遲的選擇器)。

+0

從Mac OS X手冊頁收集信息。 – dreamlax 2010-05-20 08:48:35

相關問題