我正在将一系列图像从服务器加载到NSData对象中,如下所示:
for (int i = 0; i < 36; i++)
{
NSURL *url = [NSURL URLWithString:@"http://12.34.56.78/image.jpg"];
NSData *data = [NSData dataWithContentsOfURL:url];
// Further processing here
}
问题是每个数据对象的一半被保存在内存中。这不会显示为仪器泄漏。我知道它是NSData对象,因为我已经删除了与图像有关的所有内容,现在评论之前只有两行。出现相同的行为。我已经尝试使用相同的结果明确地分配启动和释放。
这让我很难理解的是,我创建了第二个项目来尝试重新创建这种行为,我无法让它这样做。在另一个项目中,此代码按预期运行。所以我问,可能会导致这种行为的原因是什么?我觉得我忽略了一些非常明显的东西。
答案 0 :(得分:0)
从您编写的两行开始,该数据对象永远不会泄漏,因为您没有保留它,当您超出范围时,对象应该自动释放...所以无法从您发布的两行中说出来..
答案 1 :(得分:0)
我遇到类似的东西,我在AppDelegate中有一个数组,我抓住了对一行的引用,然后(错误地)释放了对象的句柄。结果是在3次后续调用之后,所讨论的行中的对象在所有属性中都有nil值,但本身并不是nil。花了我一个星期才想出那一个。直到今天,我仍然不知道为什么在我发现问题之前需要3次调用才能发布。我确信你可以想象我的挫败感,一周后我意识到一行代码是20个左右浪费时间的来源。 ;)
答案 2 :(得分:0)
如果您所看到的是稳定增长的内存,请使用Instruments的对象分配探针,并查找实际占用内存的内容。有许多方法可以以不是“泄漏”的方式浪费内存。大小是NSData大小的一半这一事实表明你正在寻找错误的地方。你不太可能释放半个物体。