0
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。谁能帮我摆脱困境?

4

1 回答 1

0

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

于 2009-08-25T07:48:16.260 回答