UIImage的imageWithContentsOfFile中的内存泄漏

时间:2013-01-14 10:01:58

标签: ios objective-c cocoa-touch

我有一个表格视图,其中10个单元格显示图像。每次我滚动时,应用程序会分配更多内存(但不会在泄漏中显示)但在分配中,我可以看到每次滚动时内存增加2兆字节。

这是泄漏的代码,特别是我设置imageview图像的行(如果我注释掉它,它不会泄漏):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_stripes" ofType:@"png"]];
    return cell;
}

enter image description here

更新:我使用1个视图控制器创建了一个简单的新项目:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.tableView.rowHeight = 130.f;

}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return 16;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    cell.imageView.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_stripes" ofType:@"png"]];


    return cell;
}

非常简单......我在这里看不到任何问题...但滚动时泄漏,内存消耗随着时间的推移而增长......

2 个答案:

答案 0 :(得分:0)

我遇到了与dataWithContentsOfURL相同的问题:@autoreleasepool解决了它

试试这个:

@autoreleasepool {
     self.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_stripes" ofType:@"png"]];
}

答案 1 :(得分:0)

问题在于没有泄漏=)。上图说明了分配而非泄漏。泄漏位于底部图形中,其图形为红色,因此没有内存泄漏。您可能认为“整体字节数”代表内存泄漏但不是,它只是程序在运行时分配的字节数。