美文网首页
NSURLSession--内存泄漏问题

NSURLSession--内存泄漏问题

作者: Mikayla321 | 来源:发表于2018-05-17 14:15 被阅读0次

1.第一种情况

单独初始化 NSURLSession

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://baidu.com"]];

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueuemainQueue]];

[[session dataTaskWithRequest:request] resume];

设置代理,并在代理方法

- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask    didReceiveData:(NSData *)data {

    NSLog(@"=====%@", [[NSString alloc] initWithData:data  encoding:NSUTF8StringEncoding]);

  // [session  finishTasksAndInvalidate];

}

运行,打开 instruments 会看到

Snip20170928_3.png

第二种情况,使用

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURLURLWithString:@"https://baidu.com"]];    

[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData* _Nullable data,NSURLResponse* _Nullable response,NSError* _Nullable error) {

NSLog(@"=====%@",[[NSStringalloc] initWithData:data encoding:NSUTF8StringEncoding]);   

 }] resume] ;

打开 instruments 不会造成内存泄漏

3.设置属性

@property(nonatomic, strong) NSURLSession*session;

也不会造成内存泄漏

4.结论

Snip20170928_5.png

通过NSURLSession的头文件我们发现,NSURLSession对于它的 delegate属性是强引用。这就意味着当session存在时,其delegate就不会被释放。另外,由session发起请求的缓存相关对象也会被其强引用并一直保留在内存中。

所以为了避免内存泄漏,根据Apple文档,当一个session不再使用时,我们应该调用finishTasksAndInvalidate或者invalidateAndCancel把session显式地置为无效(invalidated),以释放对相关对象的引用。

作者:浅y

链接:https://www.jianshu.com/p/b456e5591e70

相关文章

  • NSURLSession--内存泄漏问题

    1.第一种情况 单独初始化 NSURLSession NSURLRequest *request = [NSURL...

  • Xcode调试工具

    一.静态内存分析工具 编译阶段查找内存泄漏等问题 1.常见内存泄漏问题 常见的内存泄漏除了循环引用,CoreFou...

  • 三个方法帮助解决Android内存泄漏问题

    三个方法帮助解决Android内存泄漏问题 最近自己遇到了好几个内存泄漏的问题,也帮同事解决了几个内存泄漏的问题记...

  • 安卓内存泄漏

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

  • Part1_Android内存泄漏总结

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

  • Android 内存泄漏总结

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

  • 【中级——高级迈不过去?】Android高级工程师进阶学习——A

    Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...

  • Android内存泄漏相关

    问题1 内存泄漏的基本定义是什么?内存泄漏有什么危害?问题2 开发中常见的内存泄漏的情况有哪些?什么原因造成的?怎...

  • iOS 内存泄漏排查方法及原因分析

    本文将从以下两个层面解决iOS内存泄漏问题: 内存泄漏排查方法(工具) 内存泄漏原因分析(解决方案) 在正式开始前...

  • 内存泄漏

    内存问题的可能情况 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏...

网友评论

      本文标题:NSURLSession--内存泄漏问题

      本文链接:https://www.haomeiwen.com/subject/krybdftx.html