Ну, я не знаю, нужен ли вам еще ответ на этот вопрос, но ... какого черта. Давай сделаем это. Я собираюсь сделать некоторые предположения, но если у вас проблемы с производительностью, единственный способ действительно решить эту проблему - это протестировать ее, и без большего знания сложности ваших представлений мы не сможем получить надежные показатели. , Поэтому я собираюсь предположить, что вы попробовали несколько вещей и выбросить что-то, чего вы, возможно, не пробовали.
Когда вы загружаете представление из пера, оно разархивирует его из файла. Если эта загрузка происходит 50 раз, это может иметь большое значение для проблем с производительностью. Так что еще мы можем сделать? Итак, в вашем классе контроллера табличного представления создайте новую переменную экземпляра типа NSData
. Затем в вашем методе -init
(или другом назначенном инициализаторе) загрузите представление из списка свойств:
- (id)init
{
self = [super init];
if (self) {
// Other initialization code.
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"MyView"
ofType:@"plist"];
myData = [[NSData alloc] initWithContentsOfFile:filePath];
}
return self;
}
ОК, значит, этот список свойств загружен в NSData
. Теперь остальное должно быть понятно:
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section
{
UIView *view = [NSKeyedUnarchiver unarchiveObjectWithData:myData];
return view;
}
Моя цель состояла в том, чтобы сохранить в памяти полностью инстанцированный вид. Но потом я подумал: «Как он собирается создать этот список?» Поэтому я немного изменил его. Вместо загрузки данных из файла создайте свое представление в коде:
- (UIView *)tableView:(UITableView *)tableView
viewForHeaderInSection:(NSInteger)section
{
UIView *headerView;
if (myData == nil) {
headerView = [[UIView alloc] init];
// Configure your view, but only that part that isn’t customized.
myData = [[NSKeyedArchiver archivedDataWithRootObject:headerView] copy];
} else {
headerView = [NSKeyedArchiver unarchiveObjectWithData:myData];
}
// Now customize the view for your particular section.
return headerView;
}
Это должно дать вам гибкость при создании представления в коде, но, надеюсь, также сохранить его в памяти и кешировать для вас. Попробуйте!