// ViewController.m
// 最簡單的網絡請求
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
#pragma mark - 創建點擊事件 - 初學者最簡單的網絡請求
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"測試");
[self test];
}
- (void)test{
//MARK: - 示例:訪問百度首頁(www.baidu.com);
//MARK: - 創建並發送一個網絡請求
//MARK: - 創建的網絡請求
//MARK: - 同意資源定位符,通過url可以找到唯一的一份資源,可以是網絡資源/也可以是本地資源
NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];
//MARK: - 根據url創建網絡請求
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//MARK: - 獲得服務器響應的數據
//MARK: - 基本上所有的網絡請求都在子線程操作(注:)網絡請求屬於耗時操作,子線程用來處理耗時操作
//MARK: - NSURLSession默認就是開啟異步請求,NSURLSession中沒有提供同步的方法
//MARK: - 默認情況下completionHandler的執行線程為子線程
[[[NSURLSession sharedSession] dataTaskWithRequest:request
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable
response, NSError * _Nullable error) {
//MARK: - 使用字符串接收二進制數據
NSString *Str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
//MARK: - 創建異步+主隊列
dispatch_async(dispatch_get_main_queue(), ^{
//MARK: - 創建uiwebview
UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
//MARK: - 直接加載二進制源碼
//MARK: - [webView loadData:data MIMEType:nil textEncodingName:nil baseURL:url];
[webView loadHTMLString:Str baseURL:url];
[self.view addSubview:webView];
//MARK: - 可以將二進制文件寫入到沙盒或者到本地,保存文件為(.html)格式
//MARK: - [data writeToFile:@"寫入到本地或沙盒" atomically:YES];
});
}] resume];
//MARK: - resume:開啟網絡連接
}
@end