有没有对afn进行封装,如果不用虚拟机封装系统afn用什么

& 开源中国(OSChina.NET) |
开源中国社区(OSChina.net)是工信部
指定的官方社区我用一个单例类将一些常用的网络请求进行了二次封装,主要包括post请求 get请求 &图片文件上传下载 &视频的断点续传等功能。
首先大家先去github上下载AFN,将文件夹内的AFNetworking文件夹拖入工程中,然后创建一个图片文件参数类代码如下:
#import &Foundation/Foundation.h&
@interface UploadParam : NSObject
上传文件的二进制数据
@property (nonatomic, strong) NSData *
上传的参数名称
@property (nonatomic, copy) NSString *
上传到服务器的文件名称
@property (nonatomic, copy) NSString *fileN
上传文件的类型
@property (nonatomic, copy) NSString *mimeT
#import &UploadParam.h&
@implementation UploadParam
然后创建网络工具AFNManager具体代码如下(此处我提供了代理和block两种方式进行传值供大家选择):
#import &Foundation/Foundation.h&
#import &AFNManagerDelegate.h&
#import &UploadParam.h&
@interface AFNManager : NSObject
@property (nonatomic, weak) id&AFNManagerDelegate&
AFNManager单利
+(AFNManager *)sharedM
#pragma mark --代理的方式传值
- (void)GET:(NSString *)URLString parameters:(id)
- (void)Post:(NSString *)URLString parameters:(id)
- (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadP
#pragma mark --block的形式传值
- (void)GET:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))
- (void)Post:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))
- (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam succeed:(void (^)(id data))succeed failure:(void (^)(NSError *error))
#pragma mark --断点续传
@param URLString 请求接口
- (void)downloadStartWithUrl:(NSString *)URLString fileName:(NSString *)fileN
@param URLString 请求接口
- (void)uploadStartWithUrl:(NSString *)URLString fileData:(NSData *)fileD
- (void)operationP
- (void)operationR
- (void)operationC
#import &AFNManager.h&
#import &AFNetworking.h&
@interface AFNManager()
AFHTTPRequestOperation * //创建请求管理(用于上传和下载)
static AFNManager *manager =
@implementation AFNManager
+(AFNManager *)sharedManager
static dispatch_once_t onceT
dispatch_once(&onceToken, ^{
if (manager == nil) {
manager = [[self alloc] init];
+(instancetype)allocWithZone:(struct _NSZone *)zone
static dispatch_once_t onceT
dispatch_once(&onceToken, ^{
if (manager == nil) {
manager = [super allocWithZone:zone];
- (void)GET:(NSString *)URLString parameters:(id)parameters
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {
[self.delegate AFNManagerDidSuccess:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {
[self.delegate AFNManagerDidFaild:error];
- (void)Post:(NSString *)URLString parameters:(id)parameters
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {
[self.delegate AFNManagerDidSuccess:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {
[self.delegate AFNManagerDidFaild:error];
- (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr POST:URLString parameters:parameters constructingBodyWithBlock:^(id&AFMultipartFormData& formData) { // 上传的文件全部拼接到formData
FileData:要上传的文件的二进制数据
name:上传参数名称
fileName:上传到服务器的文件名称
mimeType:文件类型
[formData appendPartWithFileData:uploadParam.data name:uploadParam.name fileName:uploadParam.fileName mimeType:uploadParam.mimeType];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {
[self.delegate AFNManagerDidSuccess:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {
[self.delegate AFNManagerDidFaild:error];
-(void)GET:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id))succeed failure:(void (^)(NSError *))failure
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseObject == nil) {
succeed(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
-(void)Post:(NSString *)URLString parameters:(id)parameters succeed:(void (^)(id))succeed failure:(void (^)(NSError *))failure
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (responseObject == nil) {
succeed(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
failure(error);
-(void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(UploadParam *)uploadParam succeed:(void (^)(id))succeed failure:(void (^)(NSError *))failure
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr POST:URLString parameters:parameters constructingBodyWithBlock:^(id&AFMultipartFormData& formData) { // 上传的文件全部拼接到formData
FileData:要上传的文件的二进制数据
name:上传参数名称
fileName:上传到服务器的文件名称
mimeType:文件类型
[formData appendPartWithFileData:uploadParam.data name:uploadParam.name fileName:uploadParam.fileName mimeType:uploadParam.mimeType];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {
succeed(responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (self.delegate && [self.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {
failure(error);
-(void)downloadStartWithUrl:(NSString *)URLString fileName:(NSString *)fileName
NSString *filePath = [NSString stringWithFormat:@&%@/Documents/%@&,NSHomeDirectory(), fileName];
operation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URLString]]];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];
可以在此设置进度条
[operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
__weak typeof(self) weakself =
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
请求成功做出提示
if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {
[weakself.delegate AFNManagerDidSuccess:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
请求失败做出提示
if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {
[weakself.delegate AFNManagerDidFaild:error];
[operation start];
- (void)uploadStartWithUrl:(NSString *)URLString fileData:(NSData *)fileData
operation = [[AFHTTPRequestOperation alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:URLString]]];
operation.inputStream = [[NSInputStream alloc] initWithData:fileData];
设置进度条
[operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
__weak typeof(self) weakself =
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
请求成功做出提示
if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidSuccess:)]) {
[weakself.delegate AFNManagerDidSuccess:responseObject];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
请求失败做出提示
if (weakself.delegate && [weakself.delegate respondsToSelector:@selector(AFNManagerDidFaild:)]) {
[weakself.delegate AFNManagerDidFaild:error];
[operation start];
- (void)operationPause
[operation pause];
- (void)operationResume
[operation resume];
- (void)operationCancel
[operation cancel];
//网络监听(用于检测网络是否可以链接。此方法最好放于AppDelegate中,可以使程序打开便开始检测网络)
- (void)reachabilityManager
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
//打开网络监听
[mgr.reachabilityManager startMonitoring];
//监听网络变化
[mgr.reachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
switch (status) {
//当网络不可用(无网络或请求延时)
case AFNetworkReachabilityStatusNotReachable:
//当为手机WiFi时
case AFNetworkReachabilityStatusReachableViaWiFi:
//当为手机蜂窝数据网
case AFNetworkReachabilityStatusReachableViaWWAN:
//其它情况
//停止网络监听(若需要一直检测网络状态,可以不停止,使其一直运行)
[mgr.reachabilityManager stopMonitoring];
网络工具代理协议代码如下:
#import &Foundation/Foundation.h&
@class AFNM
@protocol AFNManagerDelegate &NSObject&
发送请求成功
@param manager AFNManager
-(void)AFNManagerDidSuccess:(id)
发送请求失败
@param manager AFNManager
-(void)AFNManagerDidFaild:(NSError *)
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:62519次
积分:3326
积分:3326
排名:第6909名
原创:283篇
(2)(12)(17)(9)(44)(2)(5)(7)(1)(1)(3)(4)(1)(1)(17)(17)(51)(42)(50)ASI和AFN以及底层框架的关系_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ASI和AFN以及底层框架的关系
上传于||暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
你可能喜欢12.15&IOS&AFN的使用AFHTTPRequestSerializer&封装的NSURLConnection
请求的数据格式,发送给服务器的格式
// self.requestSerializer =
[AFHTTPRequestSerializer serializer];
AFHTTPRequestSerializer& 二进制的数据格式 (默认的)
AFJSONRequestSerializer& JSON
// AFPropertyListRequestSerializer
响应的解析器(默认直接解析JSON)
// self.responseSerializer =
[AFJSONResponseSerializer serializer];
// AFHTTPResponseSerializer
// AFJSONResponseSerializer
& JSON& (默认的数据格式)
AFXMLParserResponseSerializer&
XML的解析器
AFImageResponseSerializer& Image
// (处理网络图片的问题, SDWebImage)
#import "ViewController.h"
#import "AFNetworking.h"
@interface ViewController ()
@implementation ViewController
- (void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event {
postUpLoad];
#pragma mark -
POST上传图片
- (void)postUpLoad
& NSString
*urlStr = @"http://127.0.0.1/post/upload.php";
& AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager
& [manager POST:urlStr parameters:nil constructingBodyWithBlock:^(id&&/span&AFMultipartFormData& formData)
// 要上传的图片的路径
NSURL *fileUrl =
[[NSBundle mainBundle] URLForResource:@"Snip.png" withExtension:nil];
FileURL:要上传的文件的url
name: 上传到服务器,接受这个图片的字段名
这种方式,没办法修改这个文件在服务器的名称
& & & [formData
appendPartWithFileURL:fileUrl name:@"userfile"
error:NULL];
FileURL:要上传的文件的url
name: 上传到服务器,接受这个图片的字段名
fileName :& 这个文件在服务器的名称
mimeType: 表示要上传的文件的类型
& & 格式: 大类/小类
& & JPG image/jpg
& & PNG image/png
application/json
[formData appendPartWithFileURL:fileUrl
name:@"userfile" fileName:@"123321.png" mimeType:@"image/png" error:NULL];
& } success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"success");
& } failure:^(AFHTTPRequestOperation *operation, NSError
NSLog(@"failure");
#pragma mark -
- (void)getXML
& NSString
*urlStr = @"http://127.0.0.1/videos.xml";
& AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager
& // 指定我们的响应的解析器是解析XML (会返回NSXMLParser:对象)也就是需要SAX方式手动解析
& manager.responseSerializer =
[AFXMLParserResponseSerializer serializer];
& // 假如想使用DOM进行解析XML,可以指定响应的类型是二进制。拿到二进制数据就可以进行DOM解析
& manager.responseSerializer =
[AFHTTPResponseSerializer
serializer];
& [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation
*operation, id
responseObject) {
// 已经把反序列化完成的结果都直接返回了。可以更新UI了
NSLog(@"%@& %@",
responseObject, [NSThread
currentThread]);
& } failure:^(AFHTTPRequestOperation *operation, NSError
NSLog(@"%@", error);
#pragma mark - 常规的方法
// POST方法,如果需要传递参数,也可以以字典的形式传递.
//*post登录
- (void)postLogin
& NSString
*urlStr = @"http://127.0.0.1/login.php";
& AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager
& NSDictionary
*params = @{@"password" : @"zhang", @"username" : @"zhangsan"};
& [manager POST:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@& %@",
responseObject, [NSThread
currentThread]);
& } failure:^(AFHTTPRequestOperation *operation, NSError
NSLog(@"%@", error);
// 1. 没有URL,只需要指定一个url的字符串
// 2. 网络请求是异步。 完成以后的回调代码快直接是在主线程
// 3. 已经实现了反序列化
// 4. 如果get方法,需要传递参数,可以使用字段的方式传递。程序猿不需要关心url里面的参数格式
- (void)getLogin2
& NSString
*urlStr = @"http://127.0.0.1/login.php";
& AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager
& NSDictionary
*params = @{@"password" : @"zhang", @"username" : @"zhangsan"};
& [manager GET:urlStr parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@& %@",
responseObject, [NSThread
currentThread]);
& } failure:^(AFHTTPRequestOperation *operation, NSError
NSLog(@"%@", error);
- (void)getLogin
& NSString
*urlStr = @"http://127.0.0.1/login.php?username=zhangsan&password=zhang";
& AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager
& [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation
*operation, id
responseObject) {
NSLog(@"%@& %@",
responseObject, [NSThread
currentThread]);
& } failure:^(AFHTTPRequestOperation *operation, NSError
NSLog(@"%@", error);
- (void)getDemo
& NSString
*urlStr = @"http://127.0.0.1/videos.json";
& AFHTTPRequestOperationManager *manager
= [AFHTTPRequestOperationManager
& [manager GET:urlStr parameters:nil success:^(AFHTTPRequestOperation
*operation, id
responseObject) {
// 已经把反序列化完成的结果都直接返回了。可以更新UI了
NSLog(@"%@& %@",
responseObject, [NSThread
currentThread]);
& } failure:^(AFHTTPRequestOperation *operation, NSError
NSLog(@"%@", error);
& NSLog(@"完成");
-(void)NSUrlConnection{
& NSString
*urlStr = @"http://127.0.0.1/videos.json";
& urlStr=[urlStr stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet
URLFragmentAllowedCharacterSet]];
*url=[NSURL
URLWithString:urlStr];
& NSMutableURLRequest *request=[NSMutableURLRequest
requestWithURL:url];
& request.HTTPMethod= @"POST";
& [NSURLConnection
sendAsynchronousRequest:request queue:[[NSOperationQueue
alloc]init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
dispatch_async(dispatch_get_main_queue(),
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 afn二次封装 的文章

 

随机推荐