iOS APP 开发 OC 第十五天,网路请求(请求方式对比,缓存策略,请求时长)

tags: OC 30 day


获取网路数据的两种方式:

方式一:NSData

方法: 获取JSON,修改伺服器内的JSON,重新下载。製作一个API接口缺点: 无法放置缓存策略,超时时长,请求
我们来複习一下如何使用NSData获取数据。
  //第一种方式 获取网路数据   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);

方式二:NSURLConnection

特点: 可以异步发送请求,可以通过NSMutableRequest设置缓存策略,超时时长,header。
   //第二种方式 获取网路数据    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,也有很多种请求资讯无法操作。

如何利用第二种方式请求header?

    NSMutableURLRequest *request = [NSURLRequest requestWithURL:url];        //设置请求头    [request setValue:你要设置的value forHTTPHeaderField: 你要设置的键];

如何设置缓存策略

配置参数时,可以看到三个参数设定,如下

URL缓存策略时长
    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,};

http协议的缓存策略 0

NSURLRequestUseProtocolCachePolicy

忽略本地缓存 加载最新数据 1

NSURLRequestReloadIgnoringLocalCacheData

如果有缓存,返回缓存数据,否则重新下载 2

NSURLRequestReturnCacheDataElseLoad

返回缓存数据,没有缓存也不下载网路数据 3

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秒,合适吗?

不合适,让使用者等待60秒的时间,太长了。你觉得合适的时间是几秒呢?欢迎在下面留言给我。


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章