@interface NSURLSession : NSObject
// 共享的单例会话对象
@property (class, readonly, strong) NSURLSession *sharedSession;
// 指定配置 创建会话
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration;
// 指定配置、代理、队列 创建会话
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue;
// 委托队列
@property (readonly, retain) NSOperationQueue *delegateQueue;
// 创建此对象时分配的委托
@property (nullable, readonly, retain) id <NSURLSessionDelegate> delegate;
// 此会话的配置对象副本
@property (readonly, copy) NSURLSessionConfiguration *configuration;
// 会话的应用程序定义的描述性标签
@property (nullable, copy) NSString *sessionDescription;
// 如果请求结束(无论成功或失败),需调用方法来将NSURLSession停止,否则有可能造成无法释放NSURLSession对象,造成内存泄漏
- (void)finishTasksAndInvalidate;
// 取消所有未完成的任务,然后是会话无效
- (void)invalidateAndCancel;
// 清空所有cookie,缓存和凭证存储,删除磁盘文件,将正在进行的下载刷新到磁盘,并确保将来的请求发生在新套接字上。
- (void)resetWithCompletionHandler:(void (^)(void))completionHandler;
// 将cookie和凭证刷新到磁盘,清除瞬态缓存,并确保将来的请求发生在新的TCP连接上
- (void)flushWithCompletionHandler:(void (^)(void))completionHandler;
// 在会话中异步调用包含所有数据,上载和下载任务完成回调
- (void)getTasksWithCompletionHandler:(void (^)(NSArray<NSURLSessionDataTask *> *dataTasks, NSArray<NSURLSessionUploadTask *> *uploadTasks, NSArray<NSURLSessionDownloadTask *> *downloadTasks))completionHandler;
// 在会话中异步调用包含所有数据,上载和下载任务的完成回调
- (void)getAllTasksWithCompletionHandler:(void (^)(NSArray<__kindof NSURLSessionTask *> *tasks))completionHandler API_AVAILABLE(macos(10.11), ios(9.0), watchos(2.0), tvos(9.0));
// 通过请求对象创建任务,可以调整任务行为的各个方面,包括缓存策略和超时间隔,创建任务后,必须通过调用其resume方法启动它
- (NSURLSessionDataTask *)dataTaskWithRequest:(NSURLRequest *)request;
// 创建任务后,必须通过调用其resume方法启动它,该任务调用会话委托上的方法,以便为你提供响应元数据,响应数据等
- (NSURLSessionDataTask *)dataTaskWithURL:(NSURL *)url;
// 通过文件URL 创建上传任务
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;
// 通过文件data 创建上传任务
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromData:(NSData *)bodyData;
// 通过文件流 创建上传任务
- (NSURLSessionUploadTask *)uploadTaskWithStreamedRequest:(NSURLRequest *)request;
// 根据指定请求对象 创建下载任务
- (NSURLSessionDownloadTask *)downloadTaskWithRequest:(NSURLRequest *)request;
// 根据URL 创建下载任务
- (NSURLSessionDownloadTask *)downloadTaskWithURL:(NSURL *)url;
// 创建下载任务以恢复以前取消或失败的下载任务
- (NSURLSessionDownloadTask *)downloadTaskWithResumeData:(NSData *)resumeData;
// 创建一个与指定主机名和端口建立双向TCP/IP连接的任务,创建任务后,必须通过调用resume方法启动它
- (NSURLSessionStreamTask *)streamTaskWithHostName:(NSString *)hostname port:(NSInteger)port API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) __WATCHOS_PROHIBITED;
// 创建使用指定网络服务建立双向TCP/IP连接任务,创建任务后,必须通过调用resume方法启动它
- (NSURLSessionStreamTask *)streamTaskWithNetService:(NSNetService *)service API_AVAILABLE(macos(10.11), ios(9.0), tvos(9.0)) __WATCHOS_PROHIBITED;
@end