【发布时间】:2015-07-18 08:58:24
【问题描述】:
即使在使 NSURLSession 无效后,使用 Instruments 运行配置文件,一些名为 TubeManager、HTTPConnectionCache 和 HTTPConnectionCacheDictionary 的类(可能是私有的)仍然存在于内存中。
代码 sn-p 重现:
NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
NSURLSession* session = [NSURLSession sessionWithConfiguration:config];
NSURLRequest* request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];
NSURLSessionDataTask* sessionDataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
[session finishTasksAndInvalidate];
}];
[sessionDataTask resume];
【问题讨论】:
-
我不确定你是如何测量内存增长的,但是如果我查看总分配,下载 100 次,然后再次检查总分配,然后重复五次,我看到了峰值分配趋于平稳。如果我做一个内存警告,甚至其中一些会被恢复。现在,如果我查看某个范围内的分配变化或使用“世代”,它看起来正在增长,但是 net-net,它趋于平稳。此外,请确保您已关闭僵尸。
-
您是否尝试过运行 Instruments 并查找我提到的类?
-
是的,但它们不会继续增长(即我的应用程序不断回落到稳定状态)。
-
请看一下这个截图:evernote.com/shard/s70/sh/14637ee5-11ea-4744-889d-56ca50b647da/…你没有得到类似的结果吗?您运行的是哪个版本的 iOS?
-
iOS 8.3.1。我注意到这三个对象中的每一个都只有两个实例。巧合的是,我只实例化了两个会话。您不会为每个请求实例化新会话,是吗?
标签: ios macos memory-management memory-leaks nsurlsession