第二十三篇、使用NSURLSession时需要注意一个内存泄漏问题
2016-09-12 21:51
549 查看
如图1代码所示,初始化一个NSURLSession临时实例对象并由它发起一个网络请求。我们通过Instruments的Leaks工具会发现其存在内存泄漏和循环引用的地方,如图2所示。
通过NSURLSession的头文件我们发现,NSURLSession对于它的 delegate属性是强引用。这就意味着当session存在时,其delegate就不会被释放。另外,由session发起请求的缓存相关对象也会被其强引用并一直保留在内存中。
所以为了避免内存泄漏,根据Apple文档,当一个session不再使用时,我们应该调用finishTasksAndInvalidate或者invalidateAndCancel把session显式地置为无效(invalidated),以释放对相关对象的引用。
最后,在一个 App 生命周期内,我们通常会初始化并配置好一个 NSURLSession对象,然后由它统一发起请求,一般不会显式把该session 置为无效(会在持有该session的类的dealloc方法里去释放它),所以建议采用单例的方式来使用NSURLSession(我们可以看到AFNetwoking的官方Demo也是通过单例来使用 AFSessionManager),就不会出现上述内存泄漏问题。
参考:
1. Apple NSURLSession Class Reference O网页链接
2. Memory leak when using NSURLSession.downloadTaskWithURL O网页链接
3. NSURLSession memory leak O网页链接
相关文章推荐
- 《转》使用jQuery Ajax功能的时候需要注意的一个问题
- 使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
- 使用tableViewController时候需要注意的一个问题
- 调试使用了函数模块的程序时需要注意的一个小问题
- 在MyEclipse中使用Hibernate需要注意的一个问题
- php中使用$_REQUEST需要注意的一个问题
- 使用synchronized需要注意的一个问题
- 使用java.lang.Integer需要注意的一个问题
- PHP的foreach中使用引用时需要注意的一个问题和解决方法
- 一个使用手机时需要注意的问题
- 使用jQuery Ajax功能的时候需要注意的一个问题
- 使用string.Format需要注意的一个性能问题
- 使用maven的maven-shade-plugin插件时需要注意的一个问题
- 使用DB2中需要注意的一个问题。
- 使用jQuery Ajax功能的时候需要注意的一个问题
- 调试使用了函数模块的程序时需要注意的一个小问题
- 使用string.Format需要注意的一个性能问题
- php array_merge函数使用需要注意的一个问题
- 使用string.Format需要注意的一个性能问题
- php中使用$_REQUEST需要注意的一个问题