2025-04-15 网络库Manager是否需要封装成单例
网络库:
AFHTTPSessionManager
NSURLSession强引用持有AFHTTPSessionManager
mananger和manager的NSURLSessionConfiguration每次都是创建新的,manager不会释放,dealloc方法没有调用
NSURLSessionConfiguration 中有一个属性:
/* The cookie storage object to use, or nil to indicate that no cookies should be handled */
@property (nullable, retain) NSHTTPCookieStorage *HTTPCookieStorage;
不同的session
它决定了这个 session 用哪套 CookieStorage。如果不指定,它默认使用 [NSHTTPCookieStorage sharedHTTPCookieStorage],即全局共享 cookie storage。
所以默认情况下 多个mananager 应该是能共享cookie的,因为虽然用的不同的NSURLSessionConfiguration,不同的cookie有不同的cookie对象,但是用sharedHTTPCookieStorage的所以是单例的,可以共享
在manange的创建方法中 添加日志:
- (instancetype)initWithBaseURL:(NSURL *)url
sessionConfiguration:(NSURLSessionConfiguration *)configuration
{
self = [super initWithSessionConfiguration:configuration];
if (!self) {
return nil;
}
// Ensure terminal slash for baseURL path, so that NSURL +URLWithString:relativeToURL: works as expected
if ([[url path] length] > 0 && ![[url absoluteString] hasSuffix:@"/"]) {
url = [url URLByAppendingPathComponent:@""];
}
self.baseURL = url;
self.requestSerializer = [AFHTTPRequestSerializer serializer];
self.responseSerializer = [AFJSONResponseSerializer serializer];
NSLog(@"---->cookie=%p, %@",self.session.configuration.HTTPCookieStorage,self.session.configuration.HTTPCookieStorage);
return self;
}
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:1>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:1>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:1>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:5>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:9>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:11>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:13>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:13>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:15>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:15>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:15>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
---->cookie=0x2837584a0, <NSHTTPCookieStorage cookies count:23>
MWNetworkEngine网络库中有不同方式的网络调用方式
requestCommonURL 是每次创建manager
sendRequestWithHostType 是使用单例sharedEncryptSessionManager (manager )
#1 0x000000010dd5bdcc in -[MWNetworkEngine(Common) requestCommonURL:method:params:header:cerPath:policyMode:customTimeout:expectJsonRequest:expectJsonResponse:expectContentTypes:success:failure:] at /Users/mi/Documents/miwear/MiJiaWear/Pods/miwearNetWorkLib/miwearNetWorkLib/Classes/MWNetworkEngine.m:1710
AFHTTPSessionManager *commonSessionManager = [AFHTTPSessionManager manager];
#3 0x000000010dd54e2c in __129-[MWNetworkEngine sendRequestWithHostType:method:encryptPath:path:params:timeout:headers:ssecurity:serviceToken:success:failure:]_block_invoke at /Users/mi/Documents/miwear/MiJiaWear/Pods/miwearNetWorkLib/miwearNetWorkLib/Classes/MWNetworkEngine.m:922
@interface MWNetworkEngine ()
@property (nonatomic, strong) AFHTTPSessionManager *sharedAivsSessionManager;
@property (nonatomic, strong) AFHTTPSessionManager *sharedEncryptSessionManager;
@end
AFHTTPSessionManager *manager = ws.sharedEncryptSessionManager;
+ (instancetype)sharedInstance {
static MWNetworkEngine* engineInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
engineInstance = [[self alloc] init];
});
return engineInstance;
}
- (instancetype)init {
self = [super init];
if (self) {
_timeDiffWithServer = 0;
self.sharedEncryptSessionManager = [AFHTTPSessionManager manager];
}
@implementation AFURLSessionManager
- (instancetype)init {
return [self initWithSessionConfiguration:nil];
}
@interface AFURLSessionManager ()
@property (readwrite, nonatomic, strong) NSURLSessionConfiguration *sessionConfiguration;
@property (readwrite, nonatomic, strong) NSOperationQueue *operationQueue;
@property (readwrite, nonatomic, strong) NSURLSession *session;
- (NSURLSession *)session {
@synchronized (self) {
if (!_session) {
_session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration delegate:self delegateQueue:self.operationQueue];
}
}
return _session;
}
@implementation AFURLSessionManager
- (instancetype)init {
return [self initWithSessionConfiguration:nil];
}
- (instancetype)initWithSessionConfiguration:(NSURLSessionConfiguration *)configuration {
self = [super init];
if (!self) {
return nil;
}
if (!configuration) {
//每次返回的都是新的NSURLSessionConfiguration对象
configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
}