iOS开发:对AFNetworking进行封装

本文介绍了一个简单的AFNetworking封装方法,通过创建一个继承自NSObject的类SYNetworkingManager来处理HTTP请求,包括GET和POST请求,同时提供了请求成功和失败的回调。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上也有很多的对AFNetworking进行封装的方法,此处我只是简单的记录一下;

首先,我们创建一个继承与NSObject的类,定义两个属性,分别是请求成功和请求失败的,.h中的代码如下:

#import <Foundation/Foundation.h>

typedef void (^SuccessBlock)(NSDictionary *data);
typedef void (^FailureBlock)(NSError *error);

@interface SYNetworkingManager : NSObject

@property (nonatomic, copy) SuccessBlock successBlock;
@property (nonatomic, copy) FailureBlock failureBlock;

/**
 *  发送get请求
 *
 *  @param URLString  请求的网址字符串
 *  @param parameters 请求的参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 */
+ (void)getWithURLString:(NSString *)urlString
              parameters:(id)parameters
                 success:(SuccessBlock)successBlock
                 failure:(FailureBlock)failureBlock;

/**
 *  发送post请求
 *
 *  @param URLString  请求的网址字符串
 *  @param parameters 请求的参数
 *  @param success    请求成功的回调
 *  @param failure    请求失败的回调
 */
+ (void)postWithURLString:(NSString *)urlString
               parameters:(id)parameters
                  success:(SuccessBlock)successBlock
                  failure:(FailureBlock)failureBlock;

@end

.m中的实现如下:

+ (void)getWithURLString:(NSString *)urlString
              parameters:(id)parameters
                 success:(SuccessBlock)successBlock
                 failure:(FailureBlock)failureBlock
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    /**
     *  可以接受的类型
     */
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    /**
     *  请求队列的最大并发数
     */
    //    manager.operationQueue.maxConcurrentOperationCount = 5;
    /**
     *  请求超时的时间
     */
    manager.requestSerializer.timeoutInterval = outTime;
    [manager GET:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (successBlock) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
            successBlock(dic);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failureBlock) {
            failureBlock(error);
            NSLog(@"网络异常 - T_T%@", error);
        }
    }];
}

+ (void)postWithURLString:(NSString *)urlString
               parameters:(id)parameters
                  success:(SuccessBlock)successBlock
                  failure:(FailureBlock)failureBlock
{
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer.timeoutInterval = outTime;
    [manager POST:urlString parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        if (successBlock) {
            NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableLeaves error:nil];
            successBlock(dic);
        }
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        if (failureBlock) {
            failureBlock(error);
            NSLog(@"网络异常 - T_T%@", error);
        }
    }];
}

以上只是对post和get请求的封装,如果有好的建议和好的文章,我很乐意学习!



文/First灬DKS(简书作者)
原文链接:http://www.jianshu.com/p/bf4e62fe9474
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
缓存策略 typedef NS_ENUM(NSUInteger, YBCacheType){ YBCacheTypeReturnCacheDataThenLoad = 0,///< 有缓存就先返回缓存,同步请求数据 YBCacheTypeReloadIgnoringLocalCacheData, ///< 忽略缓存,重新请求 YBCacheTypeReturnCacheDataElseLoad,///< 有缓存就用缓存,没有缓存就重新请求(用于数据不变时) YBCacheTypeReturnCacheDataDontLoad,///< 有缓存就用缓存,没有缓存就不发请求,当做请求出错处理(用于离线模式) YBCacheTypeReturnCacheDataExpireThenLoad///< 有缓存就用缓存,如果过期了就重新请求 没过期就不请求 }; //get请求 - (void)test_get { NSString *url = @"http://www.baidu.com"; NSDictionary *params = @{@"i":@"1"}; [YBHttpTool get:url params:params success:^(NSDictionary *obj) { //成功 } failure:^(NSError *error) { //失败 }]; } //get带缓存的请求 - (void)test_get_cache { NSString *url = @"http://www.baidu.com"; NSDictionary *params = @{@"i":@"1"}; [YBHttpTool get:url params:params cacheType:YBCacheTypeReturnCacheDataThenLoad success:^(NSDictionary *obj) { //成功 } failure:^(NSError *error) { //失败 }]; } //post请求带缓存 - (void)test_post_cache { NSString *url = @"http://www.baidu.com"; NSDictionary *params = @{@"i":@"1"}; [YBHttpTool post:url params:params cacheType:YBCacheTypeReturnCacheDataThenLoad success:^(NSDictionary *obj) { //成功 } failure:^(NSError *error) { //失败 }]; } //上传单张图片 - (void)test_upload_image { UIImage *image = [UIImage imageNamed:@"1"]; NSData *data = UIImageJPEGRepresentation(image, 0.5); [YBHttpTool uploadImageWithImage:data success:^(NSDictionary *obj) { //上传成功 } failure:^(NSError *error) { //上传失败 }]; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值