UIImage imageWithData内存泄漏

时间:2011-06-21 09:52:46

标签: iphone memory-leaks uiimage

使用ASIHTTP,下面的代码位于ImageDownloader类中。我得到了内存泄漏,这是在底部添加的,但我不知道为什么。我以为tempImage会在没有做任何事情的情况下自动释放?

- (void)requestFinished:(ASIHTTPRequest *)request
{
    UIImage *tempImage = [UIImage imageWithData:[request responseData]];

    if (tempImage.size.width > 250.0f && tempImage.size.height > 180.0f)
    {
        self.image = tempImage;
        self.circleImage = [UIImage imageNamed:@"hover.png"];

        if ([self.delegate respondsToSelector:@selector(addImageToModel:)])
            [self.delegate addImageToModel:self];
    }
    else 
    {
         if ([self.delegate respondsToSelector:@selector(badImage)])
            [self.delegate badImage];
    }

    tempImage = nil;
}

Stack trace from Instruments

3 个答案:

答案 0 :(得分:1)

self.image设置为tempImage,因此它可能会保留图像。它是在任何地方发布的吗?

答案 1 :(得分:0)

你不应该写这一行:

tempImage = nil;

由于tempImage是一个函数范围变量,因此它将自行处理。 此外,如果self.image是(非原子的,分配)可能是你的泄漏的起源。

关于堆栈跟踪图像,这是来自泄漏仪器还是记忆仪器?

不幸的是,在您提供更多代码之前,我们将无法为您提供更多帮助。

答案 2 :(得分:0)

正如托马斯所说,它可能是自我保留图像的形象?

你考虑过唤醒僵尸吗? ;)

http://www.mikeash.com/pyblog/friday-qa-2011-05-20-the-inner-life-of-zombies.html

http://www.cocoadev.com/index.pl?NSZombieEnabled