我有一个表格视图,其中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;
}
更新:我使用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;
}
非常简单......我在这里看不到任何问题...但滚动时泄漏,内存消耗随着时间的推移而增长......
答案 0 :(得分:0)
我遇到了与dataWithContentsOfURL相同的问题:@autoreleasepool解决了它
试试这个:
@autoreleasepool {
self.image = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"background_stripes" ofType:@"png"]];
}
答案 1 :(得分:0)
问题在于没有泄漏=)。上图说明了分配而非泄漏。泄漏位于底部图形中,其图形为红色,因此没有内存泄漏。您可能认为“整体字节数”代表内存泄漏但不是,它只是程序在运行时分配的字节数。