我有一個應用程序,它所做的第一件事是使用簡單的HTTP POST在一個API中註冊自己。我一直在func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?)
這樣做,因爲Apple表示這是對URL調用的要求。因爲永不阻塞主線程很重要,所以這個調用是異步完成的。在應用程序啓動前獲取數據的策略
問題是,當它完成異步時,第一個屏幕打開並立即對API進行調用。由於這是快於第一API調用,第二個電話得到了401
爲了避免這種情況,我開始第二呼叫之前做了很俗氣的事情:
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
while (InformationFromFirsCall == nil)
{
sleep(1)
}
}
是否有更好的策略來做到這一點?我正在考慮在API的每次調用開始時使用dispatch_once
,並在InformationFromFirstCall的回調中實現代碼。
這是否合理?
謝謝!
爲什麼不放置加載屏幕並等待第一個註冊API調用完成? – jestro
@jestro,這不是一個壞主意,但是我在第一個地方使用asyn的原因恰恰是不讓用戶等待,並讓他在後臺運行時體驗應用程序。 –