网络编程第三方框架:AFNetworking、SDWebImage

介绍:这些框架是开源的,经过前人的封装、改进,成为使用次数很多的一个性能好的源代码框架,只需要将它导入项目中,就可以使用。因此,在做项目时,使用它能够大大地提高效率。
 
※ 一、AFNetworking:功能是用来下载网络数据(包括文件,图片等)
属性如下:
※NSURLConnection:   
   AFURLConnectionOperation
   AFHTTPRequestOperation
   AFHTTPRequestOperationManager
 
※ NSURLSession   
   AFURLSessionManager
   AFHTTPSessionManager
 
※Serialization
   <AFURLRequestSerialization>
AFHTTPRequestSerializer

AFJSONRequestSerializer

AFPropertyListRequestSerializer

<AFURLResponseSerialization>

AFHTTPResponseSerializer

AFJSONResponseSerializer

AFXMLParserResponseSerializer

  AFXMLDocumentResponseSerializer (Mac OS X)

AFPropertyListResponseSerializer

AFImageResponseSerializer

AFCompoundResponseSerializer

封装的主要方法如下:
说明:`AFHTTPRequestOperationManager`封装了与web应用程序通过HTTP通信的常见模式,包括创建请求,响应序列化,网络可达性监控、运营管理和安全,以及请求。
<1> `GET` Request:get请求
      AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
     [manager GET:@"http://example.com/resources.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
         NSLog(@"JSON: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
         NSLog(@"Error: %@", error);
      }];
 
<2>`POST` URL-Form-Encoded Request:post请求
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
     NSDictionary *parameters = @{@"foo": @"bar"};
     [manager POST:@"http://example.com/resources.json" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
          NSLog(@"JSON: %@", responseObject);
     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
          NSLog(@"Error: %@", error);
     }];
<3>`POST` Multi-Part Request:post多部分的请求
     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
     NSDictionary *parameters = @{@"foo": @"bar"};
     NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
     [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
             [formData appendPartWithFileURL:filePath name:@"image" error:nil];
      } success:^(AFHTTPRequestOperation *operation, id responseObject) {
             NSLog(@"Success: %@", responseObject);
      } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
             NSLog(@"Error: %@", error);
      }];
 
 
说明:“AFURLSessionManager”创建并管理一个“NSURLSession”对象基于指定的“NSURLSessionConfiguration”对象,这符合< NSURLSessionTaskDelegate >,< NSURLSessionDataDelegate >,< NSURLSessionDownloadDelegate >,和< NSURLSessionDelegate >。
<4>Creating a Download Task:创建一个下载任务
          NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
 
NSURL *URL = [NSURL URLWithString:@"http://example.com/download.zip"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
 
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:nil destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
    NSURL *documentsDirectoryURL = [[NSFileManager defaultManager] URLForDirectory:NSDocumentDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:NO error:nil];
    return [documentsDirectoryURL URLByAppendingPathComponent:[response suggestedFilename]];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
    NSLog(@"File downloaded to: %@", filePath);
}];
[downloadTask resume];
 
<5>Creating an Upload Task:创建一个上传任务
          NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
 
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
 
NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"Success: %@ %@", response, responseObject);
    }
}];
[uploadTask resume];
 
<6>Creating an Upload Task for a Multi-Part Request, with Progress:创建一个多部分请求带进程的上传任务
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://example.com/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
        [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"file://path/to/image.jpg"] name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" error:nil];
    } error:nil];
 
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;
 
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
 
[uploadTask resume];
 
<7>Creating a Data Task:创建一个数据的任务
      NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
 
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
 
NSURLSessionDataTask *dataTask = [manager dataTaskWithRequest:request completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
    if (error) {
        NSLog(@"Error: %@", error);
    } else {
        NSLog(@"%@ %@", response, responseObject);
    }
}];
[dataTask resume];
 
<8>请求序列化
 
         #### 请求序列化器创建请求URL字符串编码参数作为查询字符串或HTTP的身体。
         NSString *URLString = @"http://example.com";
         NSDictionary *parameters = @{@"foo": @"bar", @"baz": @[@1, @2, @3]};
 
 
        #### Query String Parameter Encoding:查询字符串参数编码
        [[AFHTTPRequestSerializer serializer] requestWithMethod:@"GET" URLString:URLString parameters:parameters error:nil];
        GET http://example.com?foo=bar&baz[]=1&baz[]=2&baz[]=3
 
#### URL Form Parameter Encoding:URL形式参数编码
[[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
 POST http://example.com/Content-Type: application/x-www-form-urlencoded
 foo=bar&baz[]=1&baz[]=2&baz[]=3
 
#### JSON Parameter Encoding:JSON参数编码
[[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:URLString parameters:parameters];
        POST http://example.com/Content-Type: application/json
        {"foo": "bar", "baz": [1,2,3]}
 
 
 
 
※ 二、SDWebImage:功能是主要用来下载和管理网络图片(也支持动态的GIF),封装的方法如下
<1>  可以结合表格使用,设置单元格图片
      sd_setImageWithURL:(NSURL*)url placeholderImage:(UIImage*) image
 
 
<2> 可以结合表格使用,设置单元格图片,不过添加了block代码块
    sd_setImageWithURL:(NSURL*)url  placeholderImage:(UIImage*) image  completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {... completion code here ...}];
 
 
<3>SDWebImageManager是类UIImageView + WebCache类别,创建管理对象,它使用异步方式下载图像数据并缓存
     SDWebImageManager *manager = [SDWebImageManager sharedManager];
       [manager downloadImageWithURL:imageURL
                      options:0
                     progress:^(NSInteger receivedSize, NSInteger expectedSize)
                     {
                         // progression tracking code
                     }
                     completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished, NSURL     
        *imageURL)
                   {
                            if (image) 
                           {
                                  // do something with image
                           }
                   }];
 
<4>创建下载对象,它独立使用异步下载图像
        [SDWebImageDownloader.sharedDownloader downloadImageWithURL:imageURL
          options:0
        progress:^(NSInteger receivedSize, NSInteger expectedSize)
         {
                   // progression tracking code
         }
        completed:^(UIImage *image, NSData *data, NSError *error, BOOL finished)
        {
                    if (image && finished)
                    {
                                 // do something with image
                     }
        }];
 
 
<5>SDImageCache类提供了一个单例实例,创建图像缓存对象,它独立使用异步图像缓存,默认情况下SDImageCache将查找磁盘缓存如果图像不能被发现在内存缓存中,查找缓存,使用“queryDiskCacheForKey:完成:”方法。如果这个方法返回nil,这意味着缓存目前没有自己的图像。您可以通过调用替代方法来避免这个问题的发生,imageFromMemoryCacheForKey:,一个图像存储到硬盘缓存中,你使用storeImage:forKey:toDisk:
方法:
      SDImageCache *imageCache = [[SDImageCache alloc] initWithNamespace:@"myNamespace"];
     [imageCache queryDiskCacheForKey:myCacheKey done:^(UIImage *image)
     {
                 // image is not nil if image was found
      }];
 
 
<6>有时,您可能不希望使用图像URL缓存键,因为URL的一部分是动态的(即。访问控制的目的)。SDWebImageManager过滤器提供了一种方法来设置缓存键,需要NSURL作为输入,输出缓存键NSString。下面的示例应用程序中设置一个过滤器委托,将删除任何查询字符串URL之前使用它作为一个缓存键:
   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        SDWebImageManager.sharedManager.cacheKeyFilter = ^(NSURL *url)
        {
               url = [[NSURL alloc] initWithScheme:url.scheme host:url.host path:url.path];
               return [url absoluteString];
         };
        // Your app init code...
        return YES;
     }
 
<7>处理图像刷新:SDWebImageRefreshCached
     [imageView sd_setImageWithURL:[NSURL URLWithString:@"https://graph.facebook.com/olivier.poitrey/picture"]
                 placeholderImage:[UIImage imageNamed:@"avatar-placeholder.png"]
                          options:SDWebImageRefreshCached];
 

iOS:网络编程的第三方框架:AFNetworking、SDWebImage的更多相关文章

  1. IOS网络编程——第三方类库

    IOS网络编程——第三方类库 目录 概述 ASIHttpRequest AFNetworking 其他 概述 ASIHttpRequest AFNetworking 其他

  2. iOS开发之常用第三方框架(下载地址,使用方法,总结)

    iOS开发之常用第三方框架(下载地址,使用方法,总结) 说句实话,自学了这么久iOS,如果说我不知道的但是又基本上都摸遍了iOS相关知识,但是每次做项目的时候,遇到难一点的地方或者没试过的东西就闷了. ...

  3. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  4. iOS网络编程笔记——Socket编程

    一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是T ...

  5. IOS网络编程:HTTP

    IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连 ...

  6. AJ学IOS(55)多线程网络之图片下载框架之SDWebImage

    AJ分享,必须精品 效果: 代码: - (NSArray *)apps { if (!_apps) { NSArray *dictArray = [NSArray arrayWithContentsO ...

  7. iOS网络编程(三) 异步加载及缓存图片---->SDWebImage

    @SDWebImage提供一个UIImageView的类别以支持加载来自网络的远程图片.具有缓存管理.异步下载.同一个URL下载次数控制和优化等特征. @SDWebImage的导入1.https:// ...

  8. iOS网络编程

    今天的重点是UIWebView.NSURLSession.JSon. 网络编程联网准备:1.在Info.plist中添加AppTransportSecurity类型Dictionary:2.在AppT ...

  9. iOS开发常用的第三方框架

    1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...

随机推荐

  1. python开发学习-day06(模块拾忆、面向对象)

    s12-20160130-day06 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ...

  2. Codeforces Round #361 (Div. 2) D - Friends and Subsequences

    题目大意:给你两个长度为n的数组a, b,问你有多少个问你有多少个区间满足 a中最大值等于b中最小值. 思路:我本来的想法是用单调栈求出每个点的管辖区间,然后问题就变成了巨麻烦的线段覆盖问题,就爆炸写 ...

  3. bzoj 1108

    思路:水题, 将所有点按x轴对称反转,就变成了两堆点的坐标和的差.. #include<bits/stdc++.h> #define LL long long #define fi fir ...

  4. JSP内置对象——application对象和out对象

    1.application 对象application用于保存所有应用程序的公有数据.它在服务器启动时自动创建,在服务器停止时销毁. 当application对象没有被销毁时,所有用户都可以共享该ap ...

  5. bazel使用汇总

    最近重构代码之后,打算在本地用bazel来作项目构建.主要是因为brpc已经支持了bazel,所以在此之前料想会简单许多. 安装比较简单,centos直接用yum就行.按照这个指示: https:// ...

  6. Nearest Neighbor Search

    ## Nearest Neighbor Search ## Input file: standard input Output file: standard output Time limit: 1 ...

  7. FastReport.Net使用:[9]多栏报表(多列报表)

    方法一:使用页的列属性(Page Columns) 1.绘制报表标题 2.设置页的列数量为3,其他默认不变.报表设计界面便如下呈现. 3.报表拷贝前面[分组]报表的内容. 4.就这么简单,一张多栏报表 ...

  8. 几何:pick定理详解

    一.概念 假设P的内部有I(P)个格点,边界上有B(P)个格点,则P的面积A(P)为:A(P)=I(P)+B(P)/2-1. 二.说明 Pick定理主要是计算格点多边形(定点全是格点的不自交图形)P的 ...

  9. Palindromic Tree 回文自动机-回文树 例题+讲解

    回文树,也叫回文自动机,是2014年被西伯利亚民族发明的,其功能如下: 1.求前缀字符串中的本质不同的回文串种类 2.求每个本质不同回文串的个数 3.以下标i为结尾的回文串个数/种类 4.每个本质不同 ...

  10. Codeforces 160 D. Edges in MST

    \(>Codeforces \space 160 D. Edges in MST<\) 题目大意 : 给出一张带权无向图,求对于这张图上的每一条边,其是必然存在于每一种最小生成树中,还是至 ...