2011-08-30 46 views
0

我如何確保在Objective-C中,一個函數只被調用,直到另一個函數準備好了?只有調用函數,如果另一個函數準備就緒

更新:

-(void)reloadJsonFromServer { 
    [[Sync sharedObject] synchronise]; 
    [self reload]; 
} 

我有這個功能。 第二個函數「reload」只應該被調用,如果第一個函數是 - 在這種情況下它是一個單例 - 已經準備就緒。就緒意味着,第一個功能不再運行。

+6

是什麼意思的功能做好準備? –

+0

您需要在這裏提供更多信息。 –

+0

你說得對。我已經添加了更多信息。 – teawithfruit

回答

2

那麼你想等待一個異步方法的完成?有很多方法可以做到這一點。

  • 充分利用synchronise方法本身調用reload在對象上,當它完成
  • dispatch_asyncreload方法,並有它只是wait直到其他方法填充您繼續之前等待一些標誌或數據結構(BOOL synchronised或類似)。請注意,如果您的reload方法對UIKit執行任何操作,那麼您需要在主線程上運行它。
  • 更改synchronise的運行方式,因此它不會實際返回給調用方,直到完成同步爲止,然後dispatch_async方法爲reloadJsonFromServer
  • 變化synchronise如在第三點,但代替使用dispatch_async,同時添加的方法的調用的NSOperationQueue作爲NSOperation S,與reload依賴於synchronise完成。操作隊列將在此之後處理它。

這些只是少數,我相信其他人可以建議更多。

+0

是的,我想等異步方法,對。問題是,「同步」在Sync類中調用一些其他功能。當我想嵌入一個回調函數時,我遇到了同樣的問題,即在Sync類中的其他函數準備就緒之前調用「reload」函數。你的第二點是什麼事情?你寫了關於標誌。 – teawithfruit

+0

是的,第二點是在'reload'方法繼續執行它應該做的事情之前,等待一個值被設置(一個事件處理標誌或某事)。你'dispatch_async',這樣接口仍然可以更新,同時主循環繼續進行。 – darvids0n

0

在過去的幾天裏,我學習了一些關於通知的內容。 我認爲這也是一個好方法,來處理這樣的事情。欲瞭解更多關於這個看看這個博客條目的信息。

Custom Events in Objective-C

相關問題