网络编程第三方框架: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. gym101431B

    以此纪念我都快忘了的后缀自动机(捂脸) 不过这题有两种做法: 用后缀自动机,先把原串再接遍中间加入特殊连接字符再把原串反接两遍,对这个新构造出的串做后缀自动机.(或者直接建立广义后缀自动机) 下面只要 ...

  2. LoadRunner项目结合抓包工具

    LoadRunner项目结合抓包工具 常见的抓包工具包括:     1. Http协议   报文分为"请求","应答"两大类. 请求: 方法-URL-协议/版本 ...

  3. bzoj 1132 几何

    思路:我刚开始算三角形的方法是原点叉积三条边,然后计算每条边向量积的贡献,但是对于同一条线上的点 有时候没有办法抵消掉..... 看网上的思路是对于一个三角形的面积通过两条边的叉积获得,然后枚举一个点 ...

  4. bzoj 1225 dfs + 一点点数论

    思路:有一个公式  如果 x = a1 ^ b1 * a2 ^ b2 * ...... * an ^ bn 其中ai为质数,那么总共的因子个数为 (b1 + 1) * (b2 + 1) *....* ...

  5. Java8所有的包介绍(由英文文档翻译而来)

    转载: Java8所有的包介绍(由英文文档翻译而来)

  6. AngularJS Intellisense in Visual Studio 2012

    Recently, a lot of people have asked for Intellisense support for AngularJS in the Visual Studio HTM ...

  7. explode() 字符串转换数组

    explode() 函数把字符串分割为数组. 语法 explode(separator,string,limit) 例子: $str = "Hello world. It's a beaut ...

  8. ZOJ 3953 Intervals

    线段树,排序. 按照$R$从小到大排序之后逐个检查,如果$L$,$R$最大值不超过$2$,那么就把这个区间放进去,区间$+1$,否则不能放进去. #include<bits/stdc++.h&g ...

  9. Scrapy实战篇(六)之Scrapy配合Selenium爬取京东信息(上)

    在之前的一篇实战之中,我们已经爬取过京东商城的文胸数据,但是前面的那一篇其实是有一个缺陷的,不知道你看出来没有,下面就来详细的说明和解决这个缺陷. 我们在京东搜索页面输入关键字进行搜索的时候,页面的返 ...

  10. Redis_NoSql分布式数据库CAP原理

    前文简单介绍了NoSql数据库的四大分类以及常用的数据库技术,本文简单介绍分布式数据库CAP原理. 一.传统的CAID是什么 1. A(Atomicity)原子性:事务里的所有操作要么全部做完,要么都 ...