内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

iOS基础深入补完计划:NSURLSession相关API

2018-05-15 16:37 出处:清屏网 人气: 评论(0

学习NSURLSession之前、先撸一遍NSURLSession头文件里的属性和API

NSURLSession

@interface NSURLSession : NSObject

/*
    返回系统全局的NSURLSession
 */
@property (class, readonly, strong) NSURLSession *sharedSession;

/*
    自定义NSURLSession
    通过NSURLSessionConfiguration配置出一个NSURLSession实例
    区别:
    第一种你只能通过block来去监听任务的完成等少数状态。
    第二种你可以通过遵循NSURLSessionDelegate协议来详细的监听每一个步骤、并加以处理。
    delegte会被强引用、delegateQueue则是你指定的回调队列.
    如果设定成[NSOperationQueue mainQueue]、那么就会从主线程回调了
 */
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration;
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue;

/*
    返回代理的回调队列
    如果你不去主动设置delegateQueue(或者设置成了nil)。
    那么每个session将会维护一个delegateQueue。
 */
@property (readonly, retain) NSOperationQueue *delegateQueue;
/*
    返回你为session设置的代理
 */
@property (nullable, readonly, retain) id <NSURLSessionDelegate> delegate;
/*
    返回你为session设置的代理、如果没设置系统会帮你自动生成一个并且设置
 */
@property (readonly, copy) NSURLSessionConfiguration *configuration;

/*
    session的描述。类似于tag或者线程的name吧
 */
@property (nullable, copy) NSString *sessionDescription;

/* 
    在当前task执行完毕后关闭session
    对后台session无效
 */
- (void)finishTasksAndInvalidate;

/* 
    直接关闭 session
    会关闭所有`未完成`状态下的任务
 */
- (void)invalidateAndCancel;
/* 
    清空所有的cookie、缓存和凭证存储、删除磁盘文件。
 */
- (void)resetWithCompletionHandler:(void (^)(void))completionHandler;    
/* 
    将内存中的cookie、证书写入磁盘。以后将尝试新的TCP链接
 */
- (void)flushWithCompletionHandler:(void (^)(void))completionHandler;   
/* 
    列出session中所有未完成的task
 */
- (void)getTasksWithCompletionHandler:(void (^)(NSArray<NSURLSessionDataTask *> *dataTasks, NSArray<NSURLSessionUploadTask *> *uploadTasks, NSArray<NSURLSessionDownloadTask *> *downloadTasks))completionHandler; 
/* 
    列出session中所有未完成的task(查了查也试了试并没发现有什么区别啊~)
 */
- (void)getAllTasksWithCompletionHandler:(void (^)(NSArray<__kindof NSURLSessionTask *> *tasks))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));

/* 
    创建一个挂起状态的 task
    这种只能是通过代理来捕获状态
    需要通过resume来执行
 */

/* 通过NSURLRequest、创建NSURLSessionDataTask */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request;

/* 通过NSURL、创建NSURLSessionDataTask */
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url;

/* 通过NSURLRequest、创建NSURLSessionUploadTask(上传任务)、需要附带文件路径fileURL*/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;

/* 通过NSURLRequest、创建NSURLSessionUploadTask(上传任务)、需要附带二进制文件bodyData*/
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData;

/* 
    通过NSURLRequest、创建NSURLSessionUploadTask(上传任务)
    需要在代理方法URLSession:task:needNewBodyStream:中提供上传的数据流
*/
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request;

/* 创建下载任务 */
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;

/* 创建下载任务 */
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;

/* 
    通过二进制文件resumeData创建下载任务 
    也就是恢复下载或者断点续传
    比如:
    1、下载失败后error对象的userInfo字典里有一个NSURLSession​Download​Task​Resume​Data对应的value(如果他可以被恢复下载)
    2、下载被取消/暂停时、通过task的cancel​By​Producing​Resume​Data:​方法保存已经下载的数据value
*/
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;

/* 
    通过给定的域名和端口建立双向TCP/IP连接
 */
- (NSURLSessionStreamTask *)streamTaskWithHostName:(NSString *)hostname port:(NSInteger)port API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) __WATCHOS_PROHIBITED;

/* 
    通过给定的network service建立双向TCP/IP连接
 */
- (NSURLSessionStreamTask *)streamTaskWithNetService:(NSNetService *)service API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) __WATCHOS_PROHIBITED;

@end

NSURLSession (NSURLSessionAsynchronousConvenience)

block版task任务(也都是挂起状态的)

@interface NSURLSession (NSURLSessionAsynchronousConvenience)
/*
    创建一个block版本的NSURLSessionDataTask任务
 */
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;

/*
    创建一个block版本的NSURLSessionUploadTask任务
 */
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(nullable NSData *)bodyData completionHandler:(void (^)(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;

/*
    创建一个block版本的NSURLSessionDownloadTask任务
 */
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request completionHandler:(void (^)(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url completionHandler:(void (^)(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData completionHandler:(void (^)(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error))completionHandler;

好像没什么大区别、就是没有StreamedRequest这种以数据流形式的上传方法。
@end

参考


分享给小伙伴们:
本文标签: NSURLSessionAPI

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号