我在iOS(5.1,6.0,6.1)上面对NSURLConnection的一个令人烦恼的问题。
当我尝试通过http请求下载大部分数据时,我的应用程序不会将发布的数据标记为真正发布(我将在稍后解释)。
NSURLConnection在下载大部分数据时导致内存警告
我下载的代码如下所示:
NSURL *url = [NSURL URLWithString:@"http://my.server/file.zip"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[urlConnection start];
的代表是我的视图控制器。
这段代码在主runloop上调用(没有调度队列或执行选择器类似的东西)。
代表完全没有收到数据 - 没有保留,也没有复制 - 什么也没有。
问题是,当我用新创建的项目调用此代码 - 它表现良好 - 下载所有数据并完成没有任何问题。
但是当我在其他应用程序中调用代码时,突然间所有下载的数据都会在应用程序中留下内存占用空间,并且一段时间后内存用完,应用程序将收到内存警告并崩溃。
您可能会说 - 您的委托保留数据并且不会释放它。那么,我试图用仪器找到解决方案。猜猜看 - 我的应用程序在分配时显示它在下载资源时保持10 mb左右的内存! Allocations或VM Tracker上都没有显示出来。
那么如何知道应用程序会保持下载数据的内存占用?
这是代码向我展示我的记忆报告(发现早在本网站上的一些答案 - 无法找到它现在虽然:
-(void) report_memory {
struct task_basic_info info;
mach_msg_type_number_t size = sizeof(info);
kern_return_t kerr = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&info,
&size);
if(kerr == KERN_SUCCESS) {
STLog(ST_DEBUG, @"Memory in use (in bytes): %u b (%u mb)", info.resident_size, info.resident_size/(1024 * 1024));
} else {
STLog(ST_DEBUG, @"Error with task_info(): %s", mach_error_string(kerr));
}
}
我对你的问题是 - 怎么回事在这里?
为什么应用程序显示了一些内存占用?
为什么仪器没有显示出过多的配置呢?
可以通过NSURLConnection的是什么过度分配的原因是什么?
PS。我尝试了也改变磁盘,内存中的共享缓存大小,使用其他缓存策略 - 没有任何帮助:(
如何禁用僵尸对象? –
http://stackoverflow.com/questions/5386160/how-to-enable-nszombie-in-xcode –