项目标题与描述
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'
手动安装
- 下载AFNetworking源代码
- 将AFNetworking目录添加到项目中
- 链接系统依赖框架:
- Foundation.framework
- SystemConfiguration.framework
- Security.framework
- MobileCoreServices.framework (iOS)
- 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.h
typedef 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智能小助手)
公众号二维码