当我们在使用 _session = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];这个时候注意设置delegate是强引用的也就意味着session是强引用着self的,如果这个时候self中有个属性是session还是强引用的,这样就会造成循环引用。所以这个时候我们就得在适当的时候使session无效。
我们可以这么做
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//使session做完下载操作之后再使它无效
[self.session finishTasksAndInvalidate];
//这里不用设置self.session为nil,因为控制器都销毁了,session肯定也销毁了
}
我们也可以在适当的时机去添加下面的代码
//取消操作session一旦无效之后,session无法再次使用
[self.session invalidateAndCancel];
//下载完成,再让session无效
//[self.session finishTasksAndInvalidate];
//这里让session设置为nil,就是为了防止我们还是要使用session的时候再次下载或者上传或者删除文件的时候程序直接崩溃,所以设置为nil,这里我们session
self.session = nil;
当我们使用单例创建的session,不需要销毁,因为我们通过shared获得的session无法去设置代理,所以不用担心。
单例的对象一直存储在静态存储区