異步請求需要運行循環。當數據傳遞到服務器或是被客戶端接收時,運行循環用于實現事件與委托對象之間的通信。異步請求在發出時,會在當前線程的運行循環上操作,這個實現細節是很重要的,因為在GCD塊中或者是通過NSOperationQueue創建的線程并沒有運行循環。因此,如果在后臺線程上發出了異步請求,那么還需要確定線程是有運行循環還是使用了別的運行循環。如下代碼片斷展示了如何顯示地將請求處理指定給運行循環。
NSURLConnection connection=[[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:NO]; [connection scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode]; [connection start];
第一個操作創建了NSURLConnection對象,不過并沒有立刻啟動方法,這樣就可以進一步初始化了。下一步代碼獲取到主線程的運行循環,然后將它提供給連接,作為其運行循環。最后,連接通過start方法開始處理。如果不想在主運行循環中執行異步請求,那么需要在另一個線程上創建運行循環,然后,針對這個新創建的運行循環調度連接。
參考資料:《iOS網絡高級編程-iphone和iPad的企業應用開發》
新聞熱點
疑難解答