在ios9中,NSURLConection的sendSync..和sendAsync已通過時。被NSURLSession代替。html
如下藍色部分參考: https://lvwenhan.com/ios/454.html?utm_source=tuicoolios
NSURLSession是十分強大的。再次嘗試,兩次打印之間間隔了五秒,主線程未阻塞,證實 NSURLSession 爲異步執行。api
嘗試屢次點擊,咱們可以看到每五秒執行一次,直到所有執行完畢。服務器
NSURLSession 採用的是 「異步阻塞」 模型,即全部請求在發出後都進入 2# 線程執行,在 2# 線程內部按照阻塞隊列模式執行。初步判斷,此阻塞特性爲 NSURLSession.sharedSession() 單例模式的結果。網絡
普通網絡請求post:session
NSURL *url=[NSURLURLWithString:@"http://apis.haoservice.com/weather"];異步
NSMutableURLRequest *request=[NSMutableURLRequestrequestWithURL:url];post
request.HTTPMethod=@"POST";ui
NSString *data=[NSString stringWithFormat:@"cityname=%@&key=%@",@"煙臺",@"f2b98cebe0514424a1edb4b99c1db95c"];url
request.HTTPBody=[data dataUsingEncoding:NSUTF8StringEncoding];
NSURLSession *session=[NSURLSession sharedSession];
NSURLSessionDataTask *task=[session dataTaskWithRequest:request completionHandler:^(NSData*_Nullable data, NSURLResponse *_Nullable response, NSError *_Nullable error) {
//在此解析服務器返回的JSON或XML數據
};
[task resume]; //這句話必定得要,開始任務的意思。
下載網絡請求:
NSURLSessionDownloadTask *task=[sessiondownloadTaskWithRequest:requestcompletionHandler:^(NSURL *_Nullable location, NSURLResponse *_Nullable response, NSError *_Nullableerror) {
}];
[task resume]上傳文件請求:太複雜,也有這個方法,去頭文件找。
注意:若是想得到下載進度或者斷點下載,應該不用block方法,應該設置代理,實現協議方法。
上述兩個方法也有直接寫入URL的方法,具體頭文件裏面找。