iOS将自定义视图重用/缓存为表格单元格

时间:2013-02-11 18:07:29

标签: ios caching uiview reusability tableviewcell

我使用自定义创建的视图坐在UITableCells的背景上。一切都很好,但每次创建视图的新实例都会有一点滞后。我试图使用以下方法解决这个问题:

  • 使用包含视图所在字典的单例对象 存储
  • 创建单元格的背景视图时,请使用中的值 字典,如果它在那里,否则,创建新视图并将其存储在里面 字典。

@implementation Cacher

@static Cacher *shared

+(Cacher) sharedInstance{

 if(shared == nil){
  shared = [[super alloc]init];
  shared.viewsDictionary = [[NSMutableDictionary] alloc]init];
 }

 return shared;
{

另一个班级

+(UIView*) getCellBackgroundForKey:(NSString*)key{

  UIView *view = [[Cacher sharedInstance].viewDict objectForKey:key];
  if(!view){

  view = [[CellBackgroundView alloc]initWithFrame:...];
  [[BPPViewsCacher sharedInstance].viewsDict setObject:view forKey:key];

  }

  return view;
}

然后,在getCellBackgroundForKey内调用cellForRowAtIndexPath以放置单元格的背景。

 -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath{

 UITableViewCell *cell =[tableView dequeReusableCel....];
if(!cell){
cell = [self makeCell:indexPath];
}
//add properties to cell
...
//key is a value generated based on the type of the cell
cell.backgroundView = [ViewMaker getCellBackgroundForKey:key];

}

问题在于,以随机的方式,未显示细胞的一些背景。就像一半的细胞有bacgkrounds,另一半 - 没有。我没有注意到任何模式,所有日志似乎都很好,即没有空对象。我该如何解决这个问题?

0 个答案:

没有答案