网络编程第三方框架: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. AC日记——830A - Office Keys

    思路: 背包: 代码: #include <cmath> #include <cstdio> #include <cstring> #include <ios ...

  2. umask相关内容

    umask权限过滤符新创建的文件的权限为666,即- rw- rw- rw-新创建的目录的权限为777,即d rwxrwxrwx如umask值为0022,后三位022,即 --- -w- -w-上述默 ...

  3. Codeforces Round #222 (Div. 1) D. Developing Game

    D - Developing Game 思路:我们先枚举左边界,把合法的都扣出来,那么对于这些合法的来说值有v 和 r两维了,把v, r看成线段的两端, 问题就变成了,最多能选多少线段 使得不存在这样 ...

  4. struts2的action编写

    例 HelloWorld.jsp <% @ page contentType = "text/html; charset=UTF-8 " %> <% @ tagl ...

  5. 洗牌问题 FZU - 1062 (传说中的思路题,hhh)

    设2n张牌分别标记为1, 2, -, n, n+1, -, 2n,初始时这2n张牌按其标号从小到大排列.经一次洗牌后,原来的排列顺序变成n+1, 1, n+2, 2, -, 2n, n.即前n张牌被放 ...

  6. Python协程(上)

    几个概念: event_loop 事件循环:程序开启一个无限的循环,程序员会把一些函数注册到事件循环上.当满足事件发生的时候,调用相应的协程函数. coroutine 协程:协程对象,指一个使用asy ...

  7. codevs1081 线段树练习 2<区间修改>

    1081 线段树练习 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master   题目描述 Description 给你N个数,有两种操作 1:给区间[a,b]的所有 ...

  8. GeoIP的使用

    GeoIP介绍: 什么是GepIP ? 所谓GeoIP,就是通过来访者的IP, 定位他的经纬度,国家/地区,省市,甚至街道等位置信息.这里面的技术不算难题,关键在于有个精准 的数据库.有了准确的数据源 ...

  9. MySQL启动项提权

    关于MySQL的启动项提权,听其名知其意.就是将一段 VBS脚本导入到  C:\Documents and Settings\All Users\「开始」菜单\程序\启动 下,如果管理员重启了服务器, ...

  10. bzoj 4094: [Usaco2013 Dec]Optimal Milking

    4094: [Usaco2013 Dec]Optimal Milking Description Farmer John最近购买了N(1 <= N <= 40000)台挤奶机,编号为1 . ...