异步NSData仍然在内存中没有缓存

时间:2013-02-04 01:10:12

标签: ios memory memory-management asynchronous nsdata

我的应用内存有问题。

当我启动它时,我的应用程序的文档和数据是212KB

在推送ViewControler A之后,我在TableView中加载了来自Facebook的异步图像:

    UIButton *friendPhoto = [UIButton buttonWithType:UIButtonTypeCustom];
    [friendPhoto addTarget:self
                    action:@selector(friendPhotoWasClicked:)
          forControlEvents:UIControlEventTouchUpInside];
    [friendPhoto setFrame:CGRectMake(x, photoMargeY, photoSize, photoSize)];

    // GET IMAGE ASYNC
    NSURL *imageURL = [NSURL URLWithString:faceURL];
    [friendPhoto setImage:[UIImage imageNamed:@"default"]
                     forState:UIControlStateNormal];
        dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
        dispatch_async(queue, ^{
            NSData *data = [NSData dataWithContentsOfURL:imageURL];
            UIImage *image = [UIImage imageWithData:data];
            dispatch_async(dispatch_get_main_queue(), ^{
                [friendPhoto setImage:image
                             forState:UIControlStateNormal];
            });
        });
    //}
    [cell.contentView addSubview:friendPhoto];

工作完美!至此,文件和数据10MB

但是在弹出ViewController并在NSLog中看到为ViewController调用dealloc后,我的应用仍然是10MB。我不是要对图像进行缓存。

为什么还要10MB?我该如何解决?

1 个答案:

答案 0 :(得分:2)

检查数据和图像上的所有保留/释放可能会有所帮助。

如果您需要查看对象使用仪器的保留,释放和自动释放的位置:

在仪器中运行,在分配中设置“记录参考计数”(您必须停止记录以设置选项)。导致问题代码运行,停止记录,搜索感兴趣的ivar,向下钻取,您将能够看到所有保留,释放和自动释放发生的位置。

enter image description here