Как ускорить эту строку представления таблицы? - PullRequest
0 голосов
/ 17 января 2011


я использую табличное представление с пользовательскими значениями и изображением.

Все строки делают это :
- Проверьте устройство (iphone / ipad)
- Разбор WordPress XML
- Разделите эту строку «Четверг, 13 января 2011 22:26:27 +0000» и получите pos [1] и pos [2].
- Преобразовать «Ян» в «Дженнайо»
- установить значения в ячейке строки

Это сделать следующим образом:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {    
    @try {
        newsRow = ((NewsRowController *)[tableView dequeueReusableCellWithIdentifier:@"cell"]);
        if (newsRow == nil) {

            if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] || [[Device GetModel] isEqualToString:@"iPad"])
                [[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
            else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];

            if ([tableArray count] > 0) {               
                NSArray *chunks = [[dataArray objectAtIndex:indexPath.row] componentsSeparatedByString: @" "];

                [newsRow setCellDataWithName:[tableArray objectAtIndex:indexPath.row]  
                                     andDate:[descArray objectAtIndex:indexPath.row] 
                                         day:[chunks objectAtIndex:1] 
                                       month:[self convertMonthToExtended:[chunks objectAtIndex:2]]];
            }
        }       
    }
    @catch (NSException * e) {
        NSLog(@"OK, crashato. Sappiamo il perchè!");
    }

    return newsRow;
}

функция convertMonthToExtended делает это:

if ([small isEqualToString:@"Jan"]) return @"gennaio";
[...]
if ([small isEqualToString:@"Dec"]) return @"dicembre";

Теперь на симуляторе он работает очень хорошо, но на устройстве, в частности, на устройстве 3G, когда я прокручиваю таблицу, она прокручивается медленно, потому что я делаю много вещей.

Как я могу ускорить прокрутку ?
Как правильно повторно реализовать эту функцию , чтобы быть более быстрой?
Как я могу оптимизировать этот фрагмент?

Есть идеи, пожалуйста?

спасибо,
A

Ответы [ 2 ]

1 голос
/ 17 января 2011

Я думаю, что вы можете переместить следующий код:

if ( [[Device GetModel] isEqualToString:@"iPad Simulator"] || [[Device GetModel] isEqualToString:@"iPad"])
                [[NSBundle mainBundle] loadNibNamed:@"NewsRow_ipad" owner:self options:nil];
            else [[NSBundle mainBundle] loadNibNamed:@"NewsRow" owner:self options:nil];

За пределами tableView: cellForRowAtIndexPath: метод, потому что вам не нужно делать эту проверку для каждой строки (устройство не меняется от строки к строке). И вы можете поместить этот код в viewDidLoad.

Я предлагаю вам сделать все вычисления и работу асинхронной сети. Вы можете предварительно вычислить всю информацию, необходимую для заполнения строк, и сохранить их в таком NSArray при просмотре UIProgressView или чего-то подобного, только после того, как все операции заполняют табличное представление. Вы можете использовать метод [Tableview reloadData] для перезагрузки всех данных в табличном представлении, это означает, что numberOfSectionsInTableView:, tableView:numberOfRowsInSection: и все методы источника данных вызваны.

1 голос
/ 17 января 2011

Я бы подумал, что было бы лучше подходить для пакетной обработки этой информации в виде фрагментов в промежуточное хранилище данных, которое будет использоваться для резервного копирования UITableView, так как выполнение вычислений внутри самих ячеек приводит к возникновению проблем. описать. (В зависимости от продолжительности обработки вы, вероятно, захотите показать UIActivityIndicatorView во время обработки данных.)

Делая это, вы, вероятно, должны устранить необходимость обрабатывать данные XML для каждой строки в отдельности и т. Д., И хотя это может быть не значительно быстрее с точки зрения необработанной обработки, по крайней мере это будет ощущаться быстрее с точки зрения пользователя , что, вероятно, является ключевым вопросом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...