上篇部落格提到同步請求,同步請求使用者體驗不好,并且介紹了在同步方法上實作異步,事實上ios sdk也提供了異步請求的方法。異步請求會使用nsurlconnection委托協定nsurlconnectiondelegate。在請求不同階段會回調委托對象方法。nsurlconnectiondelegate協定的方法有:
connection:didreceivedata: 請求成功,開始接收資料,如果資料量很多,它會被多次調用;
connection:didfailwitherror: 加載資料出現異常;
connectiondidfinishloading: 成功完成加載資料,在connection:didreceivedata方法之後執行;
使用異步請求的主視圖控制器masterviewcontroller.h代碼如下:
上面的代碼在masterviewcontroller定義中實作了nsurlconnectiondelegate協定。datas屬性用來存放從伺服器傳回的資料,定義為可變類型,是為了從伺服器加載資料過程中不斷地追加到這個datas中。masterviewcontroller.m代碼如下:
在第①行的connection:didreceivedata:方法中,通過[_datas appenddata:data]語句不斷地接收伺服器端傳回的資料,了解這一點是非常重要的。如果加載成功就回調第②行的connectiondidfinishloading:方法,這個方法被回調也意味着這次請求的結束,這時候_datas中的資料是完整的,在這裡把資料發送回表示層的視圖控制器。