美文网首页iOS进阶
iOS 基础网络篇

iOS 基础网络篇

作者: Jack__yang | 来源:发表于2016-08-05 14:37 被阅读17次

多线程

  • NSThread
  • GCD
    • 队列
      • 并发队列
        • 全局队列
        • 自己创建
      • 串行队列
        • 自己创建
        • 主队列
    • 任务:block
    • 函数
      • sync:同步函数
      • async:异步函数
    • 单例模式
  • NSOperation
  • RunLoop
    • 同一时间只能选择一个模式运行
    • 常用模式
      • Default:默认
      • Tracking:拖拽UIScrollView

网络

HTTP请求

  • GET请求
// URL
NSString *urlStr = @"http://xxxxx.com";
urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURL *url = [NSURL URLWithString:urlStr];

// 请求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
  • POST请求
// URL
NSString *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];
  • 下载文件 - 需要离线断点
  • 开启任务
// 创建session
NSURLSession *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];

AFNetworking(网络请求的三方框架)

  • GET
// AFHTTPSessionManager内部包装了NSURLSession
AFHTTPSessionManager *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内部包装了NSURLSession
AFHTTPSessionManager *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

相关文章

  • 文章汇总

    ios iOS 网络篇 网络基础总结 支付宝集成 iOS支付宝支付集成 - demo例子集 - 博客园 理解 iO...

  • iOS网络篇-网络基础

    项目中常见的客户端与服务端通信 可通信的内容(即访问服务器资源) 图片,文本,语音,视频,音乐 URL:决定了和谁...

  • iOS 基础网络篇

    多线程 NSThread GCD队列并发队列全局队列自己创建串行队列自己创建主队列任务:block函数sync:同...

  • iOS 动画基础总结篇

    iOS 动画基础总结篇 iOS 动画基础总结篇

  • iOS开发网络篇—网络编程基础

    iOS开发网络篇—网络编程基础 一、为什么要学习网络编程 1.简单说明 在移动互联网时代,移动应用的特征有: (1...

  • NSURLSession

    iOS开发网络篇

  • iOS之网络编程(二:Scoket)

    上一篇写了iOS之网络编程(一:基础HTTP/HTTPS与TCP/UDP),这篇就重点说说Socket。注:网上关...

  • iOS音频篇-AVPlayer

    iOS音频篇:使用AVPlayer播放网络音乐 iOS音频篇:AVPlayer的缓存实现

  • iOS 静态库制作❣进阶

    如果没有看过 基础篇,从这里进入iOS 静态库制作❣基础篇。如果没有看过 中篇,从这里进入iOS 静态库制作❣中篇...

  • iOS架构篇-3 网络接口封装

    iOS架构篇-3 网络接口封装 关键字:iOS,网络接口封装,Alamofire,swift 网络接口API通常都...

网友评论

    本文标题:iOS 基础网络篇

    本文链接:https://www.haomeiwen.com/subject/fmihsttx.html