OC 30 day
獲取網路數據的兩種方式:
  //第一種方式 獲取網路數據
   NSURL *url = [NSURL URLWithString:@"https://run.mocky.io/v3/39057ccc-3332-4a2f-a88f-7bd259f078b0"];
   NSData *data = [NSData dataWithContentsOfURL:url];
   NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
   NSLog(@"%@",str);
   //第二種方式 獲取網路數據
    NSURL *url = [NSURL URLWithString:urlStr];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@",str);
    }];
有兩種方式,有哪一種好呢?
因為第一種方式,很多事情不能做,哪些事情呢?
第一種方式,沒辦法設置header,也有很多種請求資訊無法操作。
    NSMutableURLRequest *request = [NSURLRequest requestWithURL:url];
    
    //設置請求頭
    [request setValue:你要設置的value forHTTPHeaderField: 你要設置的鍵];
配置參數時,可以看到三個參數設定,如下
    NSMutableURLRequest *request = [NSMutableURLRequest 
    requestWithURL:<#(nonnull NSURL *)#> 
    cachePolicy:<#(NSURLRequestCachePolicy)#> 
    timeoutInterval:<#(NSTimeInterval)#>];
我們來看看NSURLRequestCachePolicy是如何被定義的
NSURLRequestCachePolicy因為有好幾種,所以他是一個枚舉。
typedef NS_ENUM(NSUInteger, NSURLRequestCachePolicy)
{
    NSURLRequestUseProtocolCachePolicy = 0,
    NSURLRequestReloadIgnoringLocalCacheData = 1,
    NSURLRequestReturnCacheDataElseLoad = 2,
    NSURLRequestReturnCacheDataDontLoad = 3,
};
NSURLRequestUseProtocolCachePolicy
NSURLRequestReloadIgnoringLocalCacheData
NSURLRequestReturnCacheDataElseLoad
NSURLRequestReturnCacheDataDontLoad
永遠不打API,主要用在離線運用。
默認情況下,我們選擇0的緩存策略。
以下是範例的程式碼。
    NSURL *url = [NSURL URLWithString:urlStr];
    NSMutableURLRequest *request = [NSMutableURLRequest 
    requestWithURL:url 
    cachePolicy:0 
    timeoutInterval:15];
我們來查看下面這個網路請求的定義。
    NSMutableURLRequest *request = [NSURLRequest requestWithURL:url];
可以看到下面這段網路請求的註解
/*! 
    @method requestWithURL:
    @abstract Allocates and initializes an NSURLRequest with the given
    URL.
    @discussion Default values are used for cache policy
    (NSURLRequestUseProtocolCachePolicy) and timeout interval (60
    seconds).
    @param URL The URL for the request.
    @result A newly-created and autoreleased NSURLRequest instance.
*/
在這段註解裏,你會發現幾個問題:
不合適,讓使用者等待60秒的時間,太長了。你覺得合適的時間是幾秒呢?歡迎在下面留言給我。