如果我们为所有单元格提供相同的标识符,则消失单元格将使用“显示单元格”的内存。滚动表格视图时意味着内容将重复。但是如果我们给出diff标识符,那么每个单元都将拥有自己的内存位置并完美地显示数据。
现在假设我在表视图中加载了1000条或更多条记录。如果我将提供不同的标识符,内存中将有大量的分配。那么有没有任何解决方案能够以最少的内存分配显示数据?
以下是我定义单元格标识符的方法:
-(UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *cellIdentifier = [NSString stringWithFormat:@"%d%d",indexPath.section,indexPath.row];
UITableViewCell *Cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (Cell == nil)
{
Cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle
reuseIdentifier:cellIdentifier];
}
}
答案 0 :(得分:2)
您遇到的问题是由于您不正确地使用单元格标识符造成的。对于要重用的所有单元,单元标识符应该相同。看看这个模板,它应该解释正确的方法:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *cellIdentifier = @"MY_CELL";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
// everything that is similar in all cells should be defined here
// like background colors, label colors, indentation etc.
}
// everything that is row specific should go here
// like label text, progress view progress etc.
return cell;
}
顺便说一下。使用camel case命名变量,大写名称用于类名。
答案 1 :(得分:1)
你应该清除出列单元格的内容,如清空标签和其他标签。如果为每个单元分配单独的内存,则很容易降低内存。完美的内存管理仍在重复使用单元格。