内存泄漏从服务器复制数据

时间:2009-08-25 07:39:05

标签: memory nsdata memory-leaks

for (int i=0; i<[images count] ;i++) {
    url=@"http://192.168.0.101/titan/titanimages/";
    url=[url stringByAppendingString:[images objectAtIndex:i]];
    //NSData *imageData=[[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:url]];
    NSData *imageData=[NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
    destinationPath=[documentsDirectory stringByAppendingString:@"/modelimages"];
    destinationPath=[destinationPath stringByAppendingPathComponent:[images objectAtIndex:i]];

    [imageData writeToFile:destinationPath atomically:YES];

    value=value+divideValue;
    printf("%f\n",value);
    [NSThread detachNewThreadSelector:@selector(updateProgressBar)toTarget:self withObject:nil];
}

此代码有内存泄漏:它不释放NSdata的内存,并在一段时间后应用程序的内存利用率达到61 MB。任何人都可以帮我摆脱这个吗?

1 个答案:

答案 0 :(得分:0)

不是100%肯定,但它可能与使用特别是NSData类的“便利构造函数”有关。当您调用“dataWithContentsOfURL”时,您将获得一个自动释放的NSData对象。但是,您当前的NSAutoreleasePool可能不在范围内,导致在应用程序退出之前释放该内存。您可以尝试切换回已注释掉的alloc / init调用,并尝试手动释放循环内的每个NSData对象,以保证为循环中创建的每个NSData实例释放NSData内存(在您保存之后)关闭NSData文件)。