缩小内存泄漏

时间:2012-01-08 15:11:21

标签: objective-c memory-leaks

我仍在寻找解决内存泄漏问题的方法。目前我在这行代码中漏洞了。

return [UIImage imageWithContentsOfFile:path];

有人有想法吗?

提前谢谢!

- (UIImage *)imageAtIndex:(NSUInteger)index {
    // use "imageWithContentsOfFile:" instead of "imageNamed:" here to avoid caching our images
    NSString *imageName = [self imageNameAtIndex:index];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:imageName];
    //NSString *path = [[NSBundle mainBundle] pathForResource:imageName ofType:@"jpg"];

    return [UIImage imageWithContentsOfFile:path];
}

- (void)configurePage:(ImageScrollView *)page forIndex:(NSUInteger)index

{

page.index = index;
page.frame = [self frameForPageAtIndex:index];

// To use full images instead of tiled images, replace the "displayTiledImageNamed:" call
// above by the following line:
// [page displayImage:[self imageAtIndex:index]];
[page displayImage:[self imageAtIndex:index]];

}

1 个答案:

答案 0 :(得分:3)

当泄漏将一行代码识别为泄漏时,没有声称所述代码行是实际泄漏。只有那段代码是泄露的分配来源

因此,imageWithContentsOfFile:返回的图像在其他地方被过度保留,找工作地点是你的工作。

这通常很容易;打开Allocations仪器的小配置面板上的“保留跟踪”[IIRC]复选框,运行您的应用程序,然后单击其中一个泄漏的UIImages以查看图像保留和释放的确切位置列表。其中一个保留不会平衡,这就是你的泄漏。

虽然略微正交,但我在一篇关于使用Heapshot Analyais查找泄漏的帖子中描述了如何执行此操作。