多线程网络总结
来源:互联网 发布:怎么判断封包数据 编辑:程序博客网 时间:2024/05/17 09:30
多线程
- NSThread
- GCD
- 队列
- 并发队列
- 全局队列
- 自己创建
- 串行队列
- 自己创建
- 主队列
- 并发队列
- 任务:block
- 函数
- sync:同步函数
- async:异步函数
- 单例模式
- 队列
- NSOperation
- RunLoop
- 同一时间只能选择一个模式运行
- 常用模式
- Default:默认
- Tracking:拖拽UIScrollView
网络
HTTP请求
- GET请求
// URLNSString *urlStr = @"http://xxxxx.com";urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlStr];// 请求NSURLRequest *request = [NSURLRequest requestWithURL:url];
- POST请求
// URLNSString *urlStr = @"http://xxxxx.com";urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:urlStr];// 请求NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];request.HTTPMethod = @"POST";request.HTTPBody = [@"username=123&pwd=123" dataUsingEncoding:NSUTF8StringEncoding];
数据解析
- JSON
- NSJSONSerialization
- XML
- SAX: NSXMLParser
- DOM: GDataXML
NSURLConnection(iOS9已经过期)
- 同步方法
- 异步方法-block
- 异步方法-代理
NSURLSession
- 发送一般的GET\POST请求
NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {}];[task resume];
- 下载文件 - 不需要离线断点
NSURLSessionDownloadTask *task = [[NSURLSession sharedSession] downloadTaskWithRequest:request completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {}];[task resume];
- 下载文件 - 需要离线断点
- 开启任务
// 创建sessionNSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];// 设置请求头(告诉服务器第1024个字节开始下载)[request setValue:@"bytes=1024-" forHTTPHeaderField:@"Range"];// 创建任务NSURLSessionDataTask *task = [session dataTaskWithRequest:request];// 开始任务[task resume];
- 实现代理方法
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{ // 打开NSOutputStream // 获得文件的总长度 // 存储文件的总长度 // 回调 completionHandler(NSURLSessionResponseAllow);}- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{ // 利用NSOutputStream写入数据 // 计算下载进度}- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{ // 关闭并且清空NSOutputStream // 清空任务task}
- 文件上传
- 设置请求头
- 拼接请求体
- 文件参数
- 其他参数(非文件参数)
- NSURLSessionUploadTask
NSURLSessionUploadTask *task = [[NSURLSession sharedSession] uploadTaskWithRequest:request fromData:body completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {}];[task resume];
AFN
- GET
// AFHTTPSessionManager内部包装了NSURLSessionAFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" };[mgr GET:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"请求成功---%@", responseObject);} failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"请求失败---%@", error);}];
- POST
// AFHTTPSessionManager内部包装了NSURLSessionAFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];NSDictionary *params = @{ @"username" : @"520it", @"pwd" : @"520it" };[mgr POST:@"http://120.25.226.186:32812/login" parameters:params success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"请求成功---%@", responseObject);} failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"请求失败---%@", error);}];
- 文件上传
AFHTTPSessionManager *mgr = [AFHTTPSessionManager manager];[mgr POST:@"http://120.25.226.186:32812/upload" parameters:@{@"username" : @"123"} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 在这个block中设置需要上传的文件// NSData *data = [NSData dataWithContentsOfFile:@"/Users/xiaomage/Desktop/placeholder.png"];// [formData appendPartWithFileData:data name:@"file" fileName:@"test.png" mimeType:@"image/png"];// [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" fileName:@"xxx.png" mimeType:@"image/png" error:nil]; [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/placeholder.png"] name:@"file" error:nil];} success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"-------%@", responseObject);} failure:^(NSURLSessionDataTask *task, NSError *error) {}];
UIWebView
- 加载请求
- JS和OC的互相调用
- 利用NSInvocation实现performSelector无限参数
- 异常捕捉
- NSException
- 崩溃统计(第三方)
- 友盟
- Flurry
- Crashlytics
0 0
- 网络多线程总结
- 多线程网络总结
- 多线程&网络总结
- 多线程、网络总结
- ios 网络编程总结-多线程
- IO、网络、多线程模型总结
- Tilera多线程网络编程总结
- Java正则、Mysql、网络编程、多线程总结
- Java知识点总结(五)多线程、网络
- 《Java核心技术》要点总结:多线程、网络与数据库
- 多线程网络
- 多线程网络
- 网络&&多线程
- 网络多线程
- 多线程 网络
- 多线程+网络
- 网络多线程
- 多线程总结--多线程介绍
- 设计模式(四)简单工厂模式
- Intent发送bitmap的问题
- 函数指针与函数名
- LeetCode 237. Delete Node in a Linked List
- 关于AlertDialog.Builder的传参
- 多线程网络总结
- Linux的用户和群组
- 百度云管家 提取下载链接
- hdu4521小明系列问题——小明序列【最长上升子序列,间隔】
- 说说Android的MVP模式
- LeetCode 283. Move Zeroes
- UVA 11374 - Airport Express(最短路)
- 一些软件的设计原则
- POJ 3684_Physics Experiment