写点什么

AFNetworking - 强大的 iOS 网络请求库

作者:qife
  • 2025-07-02
    福建
  • 本文字数:2188 字

    阅读完需:约 7 分钟

项目标题与描述

AFNetworking 是一个优雅的 iOS、macOS、watchOS 和 tvOS 网络请求库。它建立在Foundation URL加载系统之上,扩展了强大的高级功能。项目目前已经归档,不再维护,建议迁移到 Alamofire(Swift 版本)。

功能特性

  • HTTP 请求管理:提供AFHTTPSessionManager简化 HTTP 请求

  • 请求和响应序列化:支持 JSON、XML、Property List 等格式

  • 安全策略:支持 SSL 证书验证和公钥固定

  • 网络可达性监控:实时检测网络状态变化

  • UIKit 集成:为 UIImageView、UIButton 等提供网络加载扩展

  • 后台任务支持:完善的后台任务处理机制

  • 进度跟踪:上传和下载进度监控

  • 缓存控制:内置请求缓存管理

安装指南

CocoaPods 安装

在 Podfile 中添加:


pod 'AFNetworking', '~> 4.0'
复制代码

手动安装

  1. 下载 AFNetworking 源代码

  2. 将 AFNetworking 目录添加到项目中

  3. 链接系统依赖框架:

  4. Foundation.framework

  5. SystemConfiguration.framework

  6. Security.framework

  7. MobileCoreServices.framework (iOS)

  8. CoreServices.framework (macOS)

使用说明

基本 GET 请求

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];[manager GET:@"https://api.example.com/data"   parameters:nil      headers:nil     progress:nil      success:^(NSURLSessionDataTask *task, id responseObject) {        NSLog(@"JSON: %@", responseObject);    }      failure:^(NSURLSessionDataTask *task, NSError *error) {        NSLog(@"Error: %@", error);    }];
复制代码

图片加载

NSURL *url = [NSURL URLWithString:@"https://example.com/image.png"];NSURLRequest *request = [NSURLRequest requestWithURL:url];
[imageView setImageWithURLRequest:request placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { imageView.image = image; } failure:nil];
复制代码

网络状态监控

[[AFNetworkReachabilityManager sharedManager] setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {    NSLog(@"Reachability: %@", AFStringFromNetworkReachabilityStatus(status));}];[[AFNetworkReachabilityManager sharedManager] startMonitoring];
复制代码

核心代码

AFHTTPSessionManager 核心实现

// AFHTTPSessionManager.h@interface AFHTTPSessionManager : AFURLSessionManager <NSSecureCoding, NSCopying>
@property (readonly, nonatomic, strong) NSURL *baseURL;@property (nonatomic, strong) AFHTTPRequestSerializer <AFURLRequestSerialization> * requestSerializer;@property (nonatomic, strong) AFHTTPResponseSerializer <AFURLResponseSerialization> * responseSerializer;
+ (instancetype)manager;- (instancetype)initWithBaseURL:(nullable NSURL *)url;- (instancetype)initWithBaseURL:(nullable NSURL *)url sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration;
// HTTP请求方法- (nullable NSURLSessionDataTask *)GET:(NSString *)URLString parameters:(nullable id)parameters headers:(nullable NSDictionary <NSString *, NSString *> *)headers progress:(nullable void (^)(NSProgress *downloadProgress))downloadProgress success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;// 其他HTTP方法...@end
复制代码

网络可达性监控

// AFNetworkReachabilityManager.htypedef NS_ENUM(NSInteger, AFNetworkReachabilityStatus) {    AFNetworkReachabilityStatusUnknown          = -1,    AFNetworkReachabilityStatusNotReachable     = 0,    AFNetworkReachabilityStatusReachableViaWWAN = 1,    AFNetworkReachabilityStatusReachableViaWiFi = 2,};
@interface AFNetworkReachabilityManager : NSObject
@property (readonly, nonatomic, assign) AFNetworkReachabilityStatus networkReachabilityStatus;@property (readonly, nonatomic, assign, getter = isReachable) BOOL reachable;@property (readonly, nonatomic, assign, getter = isReachableViaWWAN) BOOL reachableViaWWAN;@property (readonly, nonatomic, assign, getter = isReachableViaWiFi) BOOL reachableViaWiFi;
+ (instancetype)sharedManager;+ (instancetype)manager;+ (instancetype)managerForDomain:(NSString *)domain;+ (instancetype)managerForAddress:(const void *)address;
- (instancetype)initWithReachability:(SCNetworkReachabilityRef)reachability;
- (void)startMonitoring;- (void)stopMonitoring;
- (void)setReachabilityStatusChangeBlock:(nullable void (^)(AFNetworkReachabilityStatus status))block;
@end
复制代码


更多精彩内容 请关注我的个人公众号 公众号(办公 AI 智能小助手)公众号二维码


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
AFNetworking - 强大的iOS网络请求库_ios_qife_InfoQ写作社区