0%

AFNetWorking

AFNetWorking

由于AFNetWorking在 NSURLSession初始化的时候,用到了一个代理方法。Session在ARC下不会及时的释放

在使用instruments做内存泄漏分析时,发现所有使用如下语句的地方都有内存泄漏,:

1
2
[AFHTTPSessionManager manager];
@property (nullable, readonly, retain) id <NSURLSessionDelegate> delegate;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/*
* Customization of NSURLSession occurs during creation of a new session.
* If you only need to use the convenience routines with custom
* configuration options it is not necessary to specify a delegate.
* If you do specify a delegate, the delegate will be retained until after
* the delegate has been sent the URLSession:didBecomeInvalidWithError: message.
*/
//+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration;

/*翻译:
NSURLSession的自定义发生在创建新会话期间。如果只需要使用带有自定义配置选项的便利例程,则不需要指定委托。
如果您指定了一个委托,那么该委托将被保留(retain),直到URLSession:didBecomeInvalidWithError: message发送给委托之后。
*/

+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration delegate:(nullable id <NSURLSessionDelegate>)delegate delegateQueue:(nullable NSOperationQueue *)queue;

解决方法:
一般我们通过写单例的方式

1
2
3
4
5
6
7
8
9
static AFHTTPSessionManager *manager ;`
-(AFHTTPSessionManager *)sharedHTTPSession{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 10;
});
return manager;
}

这样的话,就不会创造出更多的session,避免了泄露

暂停

希望对您有所帮助,您的支持将是我莫大的动力!