2

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

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

- (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;
}

在此处输入图像描述

更新:我用 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;
}

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

4

2 回答 2

1

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

于 2013-01-15T10:13:24.737 回答
0

我对 dataWithContentsOfURL 有同样的问题:@autoreleasepool 解决了它

试试这个:

@autoreleasepool {
     self.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_stripes" ofType:@"png"]];
}
于 2013-01-14T10:11:04.263 回答