iOS повторное использование / кэширование пользовательских представлений в качестве ячеек таблицы
Я использую специально созданный вид, чтобы сидеть на фоне 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, а другая половина - нет. Я не заметил какой-либо закономерности в этом, и все журналы выглядели нормально, то есть нет нулевых объектов. Как я могу это исправить?