ios – NSURLConnection在仪器中不断增长,这是NSURLCache吗?

所以我的应用程序存在内存问题.该应用程序有一个带有MKOverlayRenderer的MKMapView,它可以在地图上加载图像.一切正常,但30-60分钟后应用程序因内存崩溃.

使用Instruments我发现NSURLConnection正在增长,因为我找不到任何其他东西(除了我不理解的所有东西)我认为这是我的问题.

跑步1-2分钟后的截图仪器:

运行12-13分钟后截图仪器:

图像在canDrawMapRect方法中像这样加载并保存到tmp文件夹(如果我将其关闭,NSURLConnection将不会增长到那么高):

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
    [NSURLConnection sendAsynchronousRequest:request
                                       queue:[OperationQueues sharedOperationQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {


                               [data writeToFile:path atomically:YES];

然后加载到drawMapRect方法中.

我尝试使用以下代码修复此问题:

AppDelegate中:

int cacheSizeMemory = 4*1024*1024; // 4MB
int cacheSizeDisk = 32*1024*1024; // 32MB
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory diskCapacity:cacheSizeDisk diskPath:@"nsurlcache"];
[NSURLCache setSharedURLCache:sharedCache];

NSURLCache *URLCache = [[NSURLCache alloc] initWithMemoryCapacity:cacheSizeMemory
                                                     diskCapacity:cacheSizeDisk
                                                         diskPath:nil];
[NSURLCache setSharedURLCache:URLCache];

视图控制器:

- (void)didReceiveMemoryWarning
{
    [[NSURLCache sharedURLCache] removeAllCachedResponses];
    [super didReceiveMemoryWarning];
}

请求后:[已添加]

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];

但正如你在仪器中看到的那样没有任何运气.

>这可能是我的问题吗?
>这是NSURLCache正在增长还是其他什么?

根据要求提供了更多来自乐器的截图:

最佳答案 首先,一分钟内400个网络请求似乎相当过分.其中一些请求可能是重复的或不必要的.呼叫量显然是下载了大量信息,并没有给os很多时间进行清理.

其次,NSURLCache实际上提供的内存空间比默认缓存多.我在我的设备/模拟器上测试过,ios提供了512000字节的默认内存容量.您的缓存初始化为4 194 304字节(并且在磁盘上的方式更多).

我建议您将缓存大小设置得更小,以便看到一些改进.但是,调查所提出的网络请求数量将提供更长期的好处.

点赞