GCNetworkRequest 1.3.0

GCNetworkRequest 1.3.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最近发布2014年12月

未指定 维护。



  • Glenn Chiu

一个易于使用的异步 HTTP 网络库,适用于 iOS 和 OS X。

功能 / 设计

  • 完全并发/多线程设计。易于在你自己的多线程环境中应用。
  • 高性能。支持快速信号量和读写锁的现代 libdispatch 支持。
  • 非常易于使用的 API,即使是新手 HTTP 网络开发人员或不熟悉 Cocoa 网络类的人也能轻松使用。
  • 模块化架构。易于扩展。

要求

GCNetworkRequest 需要 iOS 5.0 及以上或 OS X 10.7 及以上。它还要求 Xcode 4.5 及以上和 LLVM 编译器 4.1。

安装

克隆仓库并将所需文件添加到您的 Xcode 项目中。检查这些文件是否出现在您的目标(target)的“编译源”部分。如果不是,请手动将目标分配给这些文件。

如果在非 ARC 项目中使用此库,请确保为所有实现文件添加 -fobjc-arc 编译器标志。

此库被设计为模块化。为了正确使用此库,所需的最小类包括 GCHTTPRequestOperationGCNetworkRequest

当您添加了 GCNetworkReachability 类时,需要将您的目标链接到 SystemConfiguration.framework

网络操作
GCHTTPRequestOperation 带有完成和错误处理块的网络操作的基础类。
GCJSONRequestOperaton GCHTTPRequestOperation 的子类,用于下载和解析 JSON 响应数据。
GCXMLRequestOperation GCHTTPRequestOperation 的子类,用于下载 XML 响应数据。它使用 NSXMLParser 输出进行 iOS,或通过单独的方法使用 NSXMLDocument 输出进行 OS X。
GCImageRequestOperation GCHTTPRequestOperation 的子类,用于下载图像。
网络请求
GCNetworkRequest 封装一个 NSMutableURLRequest 并添加用于上传数据和用户身份验证的简单方法。这个类是 GCHTTPRequestOperation 及其子类的参数所需。
网络队列
GCNetworkQueue NSOperationQueue 的一个子类。该类使得使用并发变得简单。它还激活了状态栏中的网络指示器。
网络可达性
GCNetworkReachability 此类允许应用程序监控网络状态。它可以检查是否有互联网连接,如果是,则报告设备是否通过 WiFi 或 WWAN 连接(3G、Edge)。

用法

JSON 请求

callbackQueue 参数决定了完成和错误处理函数在哪个 GCD 队列中被调用。当你传入 nilNULL 时,块将在主线程上被调用。如果你想在实际处理函数中执行长时间任务,最好插入一个并发分发队列。这样就不会阻塞主线程,并且保持应用程序响应。

如果你的应用程序与Web服务同步数据,那么很可能是涉及到几个串联的HTTP请求。该API被设计为可以内联插入到一个私有GCD队列中或者在 NSOperationQueue 中添加。

GCNetworkRequest *request = [GCNetworkRequest requestWithURLString:@"http://maps.googleapis.com/maps/api/geocode/json?address=Amsterdam,+Nederland&sensor=true"];

GCJSONRequestOperation *operation = [GCJSONRequestOperation JSONRequest:request
                                                          callBackQueue:nil
                                                      completionHandler:^(id JSON, NSHTTPURLResponse *response) {                                                     
                                                          /* Do something with 'JSON'..
                                                             Response status code: response.statusCode */                            
                                                      } errorHandler:^(id JSON, NSHTTPURLResponse *response, NSError *error) {
                                                          /* Do something with 'error'.. 
                                                             If you get a JSON response as error, log the output of 'JSON' */                               
                                                      }];
[operation startRequest];

文件上传

文件上传使用多部分表单数据的POST请求完成。数据可以通过使用 multiPartFormDataHandler 块添加到主体,它包含一个 formData 对象,该对象允许你添加和指定上传所需的数据。

NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"thumbnail.png"]);

GCNetworkRequest *request = [GCNetworkRequest requestWithURLString:@"http://www.someurl.com/upload"
                                                        parameters:nil
                                          multiPartFormDataHandler:^(id <GCMultiPartFormData> formData) {

                                              [formData addData:imageData name:@"thumbnail" filename:@"thumbnail.png" mimeType:@"image/png"];
                                          }];

GCHTTPRequestOperation *operation = [GCHTTPRequestOperation HTTPRequest:request callBackQueue:nil completionHandler:nil errorHandler:nil];
[operation startRequest];

取消网络请求

网络请求可以在任何时候取消。

[operation cancelRequest];

跟踪下载进度

[operation downloadProgressHandler:^(NSUInteger bytesRead, NSUInteger totalBytesRead, NSUInteger totalBytesExpectedToRead) {
    // This handler gets a continuous callback and the parameters can be used to track the progress 
}];

HTTP 管道

HTTP 管道是一种技术,其中多个 HTTP 请求在单个 TCP 连接上发送,无需等待相应的响应。如果你的Web服务器支持该功能,你可以通过此方法启用它。GET 和 HEAD 请求始终被管道化。请注意,POST 请求不应该被管道化。

[request requestShouldUseHTTPPipelining:YES];

开始网络操作

你可以通过两种方式开始网络操作。对于单个操作,你可以调用 -startRequest: 方法。如果你有多个操作已调度,则可以使用 GCNetworkQueue 类向单个队列中添加操作。网络队列允许你控制并发连接的最大数量。

网络可达性

GCNetworkReachability 类允许你监视设备的网络状态。更多信息请参阅 这里

许可证

此代码在 MIT 许可证的条款和条件下分发。

版权(c)2013 Glenn Chiu

特此授予任何人免费获取本软件及其相关文档副本(统称为“软件”)的权利,在不作限制的情况下(包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利),并允许本软件提供对象的人按照以下条件做此类事情:

上述版权声明和本许可声明应包含在本软件的副本或主要部分中。

本软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任承担责任,不论源于合同、侵权或其他方式,均与软件有关、使用软件或其他方式。