2013-06-28 24 views
2

如果您已經在主線程中,在主線程上延遲分配一段代碼是否安全?如何使用GCD在主線程上延遲後安全地分配代碼?

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, seconds * NSEC_PER_SEC); 
dispatch_after(popTime, dispatch_get_main_queue(), theBlock); 

還是有更安全的方法?如果我在主隊列(主線程)上執行此操作時是否必須執行任何檢查?

+0

我相信這不是「最大公約數」,而是「大中央調度」。 – Bhavin

+0

是的。不,你可能想用weakSelf來避免保留一個過時的視圖控制器等。 –

回答

5

你一般不必檢查塊異步排隊不管你已經在主線程,which dispatch_after does

這個函數等到指定的時間,然後異步加阻止對指定隊列。

但是,如果您使用像dispatch_sync這樣的同步功能,則必須檢查。否則會導致僵局。

+0

我只是從主線程調用上述代碼(用戶按下按鈕後)。你可以舉一個例子來說明導致死鎖的dispatch_sync嗎? – openfrog

+0

相關:http://stackoverflow.com/a/13301110/846273 –

+0

dispatch_get_current_queue已棄用。 – openfrog

0

是的,它是安全的。還有其他方法可以在主線程上執行操作,但我不認爲它們更安全。你可以使用,例如:

[[NSOperationQueue mainQueue] addOperationWithBlock: YOUR_BLOCK_HERE ]; 

當我不需要GCD的額外功能時,我更喜歡NSOperationQueue。這很容易。