iOS網路請求NSURLSession

2021-07-09 10:20:52 字數 3951 閱讀 9658

nsurlsession是ios7中新的網路介面。

nsurlsession提供的功能:

將資料上傳到指定url

在後台完成上述功能

nsurlsession工作流程:

1.建立乙個nsurlsessionconfiguration,用於第二步建立nssession時設定工作模式和網路配置。

工作模式:

1.一般模式(default):這實際上與nsurlconnection的網路協議棧是一樣,具有相同的共享nshttpcookiestorage,共享nsurlcache和共享nsurlcredentialstorage。

2.及時模式(ephemeral):沒有永續性儲存的快取,cookie或證書。這對於實現像秘密瀏覽功能的功能來說,是很理想的。

nsurlsessionconfiguration有兩個屬性:

1.allowscellularaccess屬性指定是否允許使用蜂窩連線。

2.dscretionary屬性為yes時表示當程式在後台運作時由系統自己選擇最佳的網路連線配置,該屬性可以節省通過蜂窩連線的頻寬。

在使用後台傳輸資料的時候,建議使用discretionary屬性,而不是allowscellularaccess屬性,因為它會把wifi和電源可用性考慮在內。補充:這個標誌允許系統為分配任務進行效能優化。這意味著只有當裝置有足夠電量時,裝置才通過wifi進行資料傳輸。如果電量低,或者只僅有乙個蜂窩連線,傳輸任務是不會執行的。後台傳輸總是在discretionary模式下執行。

2.建立乙個nsurlsession,系統提供了兩個建立方法:

sessionwithconfiguration:

sessionwithconfiguration:delegate:delegatequeue:

3.建立乙個nsurlrequest

4.呼叫nsurlsession物件提供的task函式,建立乙個nsurlsessiontask。

根據職能不同task有三種子類:

5.當不再需要連線呼叫session的invalidateandcancel直接關閉,或者呼叫finishtasksandinvalidate等待當前task結束後關閉。這時delegate會收到urlsession:didbecomeinvalidwitherror:這個事件。delegate收到這個事件之後會被解引用。

// 建立請求路徑

nsstring *urlstr = @"";

nsurl *url = [nsurl urlwithstring:urlstr];

// 建立請求

nsurlrequest *request = [nsurlrequest requestwithurl:url];

// 建立資料任務

nsurlsession *session = [nsurlsession sharedsession];

nsurlsessiondatatask *task = [session datataskwithrequest:request completionhandler:^(nsdata * _nullable data, nsurlresponse * _nullable response, nserror * _nullable error) ];

[task resume];

// 建立請求路徑

nsstring *urlstr = @"";

nsurl *url = [nsurl urlwithstring:urlstr];

// 建立請求

nsurlrequest *request = [nsurlrequest requestwithurl:url];

// 建立引數字串

nsstring *parmstr = @"uid=3&oid=1";

// 將引數字串轉成nsdata型別

nsdata *parmdata = [parmstr datausingencoding:nsutf8stringencoding];

// 建立上傳任務

nsurlsession *session = [nsurlsession sharedsession];

nsurlsessionuploadtask *uploadtask = [session uploadtaskwithrequest:request fromdata:parmdata completionhandler:^(nsdata * _nullable data, nsurlresponse * _nullable response, nserror * _nullable error) ];

[uploadtask resume];

// 建立請求路徑

nsstring *urlstr = @"";

nsurl *url = [nsurl urlwithstring:urlstr];

// 建立請求

nsurlrequest *request = [nsurlrequest requestwithurl:url];

nsurlsession *session = [nsurlsession sharedsession];

nsurlsessiondownloadtask *downloadtask = [session downloadtaskwithrequest:request completionhandler:^(nsurl * _nullable location, nsurlresponse * _nullable response, nserror * _nullable error) );

}];[downloadtask resume];

4:斷點續傳

- (void)start:(uibutton *)btn

- (void)pause:(uibutton *)btn];}

}- (void)stop:(uibutton *)btn

else

}[_task resume];

}// 建立session

- (nsurlsession *)session

// 建立請求

- (nsurlrequest *)request

// 建立檔案本地儲存目錄,將檔案儲存在documents資料夾下

- (nsurl *)createdirectoryfordownloaditemfromurl:(nsurl *)location

// 把檔案拷貝到指定目錄

- (bool)copytempfileaturl:(nsurl *)location todestination:(nsurl *)destination

else

}#pragma mark - nsurlsessiondownloaddelegate

- (void)urlsession:(nsurlsession *)session downloadtask:(nsurlsessiondownloadtask *)downloadtask didfinishdownloadingtourl:(nsurl *)location

else

_task = nil;

}// 每次接收到伺服器資料時呼叫

- (void)urlsession:(nsurlsession *)session downloadtask:(nsurlsessiondownloadtask *)downloadtask didwritedata:(int64_t)byteswritten totalbyteswritten:(int64_t)totalbyteswritten totalbyte***pectedtowrite:(int64_t)totalbyte***pectedtowrite

- (void)urlsession:(nsurlsession *)session downloadtask:(nsurlsessiondownloadtask *)downloadtask didresumeatoffset:(int64_t)fileoffset expectedtotalbytes:(int64_t)expectedtotalbytes

iOS 網路請求

pragma mark 網路請求 方式 非同步 ibaction delegatebuttondidclicked uibutton sender 方法 客戶端收到伺服器的響應 pragma mark 客戶端收到伺服器的響應 void connection nsurlconnection conne...

iOS的網路請求

首先建立乙個 uiviewcontroller,然後在.m檔案中寫入 簽訂協議 inte ce mainviewcontroller 可變的資料屬性,用來拼接每一小塊資料 property nonatomic,retain nsmutabledata data property nonatomic,...

IOS 網路非同步請求

非同步請求使用與同步和佇列式非同步請求相同的物件,只不過又增加了另乙個物件,即nsurlconnectiondelegate 上 import viewcontroller.h nsinteger totaldownloaded 0 inte ce viewcontroller end implem...