我如何確保在Objective-C中,一個函數只被調用,直到另一個函數準備好了?只有調用函數,如果另一個函數準備就緒
更新:
-(void)reloadJsonFromServer {
[[Sync sharedObject] synchronise];
[self reload];
}
我有這個功能。 第二個函數「reload」只應該被調用,如果第一個函數是 - 在這種情況下它是一個單例 - 已經準備就緒。就緒意味着,第一個功能不再運行。
我如何確保在Objective-C中,一個函數只被調用,直到另一個函數準備好了?只有調用函數,如果另一個函數準備就緒
更新:
-(void)reloadJsonFromServer {
[[Sync sharedObject] synchronise];
[self reload];
}
我有這個功能。 第二個函數「reload」只應該被調用,如果第一個函數是 - 在這種情況下它是一個單例 - 已經準備就緒。就緒意味着,第一個功能不再運行。
那麼你想等待一個異步方法的完成?有很多方法可以做到這一點。
synchronise
方法本身調用reload
在對象上,當它完成dispatch_async
的reload
方法,並有它只是wait
直到其他方法填充您繼續之前等待一些標誌或數據結構(BOOL synchronised
或類似)。請注意,如果您的reload
方法對UIKit
執行任何操作,那麼您需要在主線程上運行它。synchronise
的運行方式,因此它不會實際返回給調用方,直到完成同步爲止,然後dispatch_async
方法爲reloadJsonFromServer
。synchronise
如在第三點,但代替使用dispatch_async
,同時添加的方法的調用的NSOperationQueue
作爲NSOperation
S,與reload
依賴於synchronise
完成。操作隊列將在此之後處理它。這些只是少數,我相信其他人可以建議更多。
是的,我想等異步方法,對。問題是,「同步」在Sync類中調用一些其他功能。當我想嵌入一個回調函數時,我遇到了同樣的問題,即在Sync類中的其他函數準備就緒之前調用「reload」函數。你的第二點是什麼事情?你寫了關於標誌。 – teawithfruit
是的,第二點是在'reload'方法繼續執行它應該做的事情之前,等待一個值被設置(一個事件處理標誌或某事)。你'dispatch_async',這樣接口仍然可以更新,同時主循環繼續進行。 – darvids0n
在過去的幾天裏,我學習了一些關於通知的內容。 我認爲這也是一個好方法,來處理這樣的事情。欲瞭解更多關於這個看看這個博客條目的信息。
有點晚了,但NSNotification它可以處理。
NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
[center addObserverForName:nil
object:nil
queue:nil
usingBlock:^(NSNotification *notification)
{
NSLog(@"%@", notification.name);
}];
看看這個:http://nshipster.com/nsnotification-and-nsnotificationcenter/
是什麼意思的功能做好準備? –
您需要在這裏提供更多信息。 –
你說得對。我已經添加了更多信息。 – teawithfruit