Вид приложения выглядит как "LAGGING" - PullRequest
1 голос
/ 17 января 2010

Большинство представлений в моем приложении представляют собой UITableVlews внутри UIViewController. Мое приложение чувствует себя запаздывающим при попытке прокрутки таблиц. Мне было интересно (1.), лучше ли создавать объекты ячеек в табличном представлении или создавать их во время выполнения и добавлять их в подпредставление ячеек?

примеры

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
            case 3: 
            {
                NSNumber *tetherState = [[mobIntDict objectForKey:@"State"] intValue];
                NSNumber *currValState = [[NSNumber numberWithInt:1023] intValue];
                tetherSw = [[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)];
                tetherSw.tag = kDefaultSwTag;
                if(tetherState == currValState){
                    tetherSw.on = YES;
                }else{
                    tetherSw.on = NO;
                }
                [tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
                [cell.contentView addSubview:tetherSw];
                cell.textLabel.text = @"Tether";
                [tetherSw release];
            }
                break;
}

- OR -

-(void)viewDidLoad{

    tetherSw = [[[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)] autorelease];
    tetherSw.tag = kDefaultSwTag;
    [tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
            case 3: 
            {
                 [cell addSubView:tetherSw];
            }
}

Ответы [ 3 ]

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

Правильно ли вы выводите из очереди и повторно используете ячейки?

Было бы много чего оптимизировать, если бы вы повторно использовали ячейку, скажем, @ "SwitchCell", это бы сильно ускорило прокрутку. В настоящее время будет потрачено много времени на добавление переключателя в представление содержимого ячейки (разметка представлений и т. Д.) И выполнение других задач, которые должны выполняться только один раз за время существования ячейки, а не каждый раз, когда при прокрутке появляется новая ячейка.

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

    // Create cell
    static NSString *CellIdentifier = @"SwitchCell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        UISwitch *tetherSw = [[UISwitch alloc] initWithFrame:CGRectMake(197, 8, 94, 27)];
        tetherSw.tag = kDefaultSwTag;
        [tetherSw addTarget:self action:@selector(tetherSwAction:) forControlEvents:UIControlEventValueChanged];
        [cell.contentView addSubview:tetherSw];
        [tetherSw release];
    }

    // Setup for each cell
    cell.textLabel.text = @"Tether";
    NSNumber *tetherState = [[mobIntDict objectForKey:@"State"] intValue];
    NSNumber *currValState = [[NSNumber numberWithInt:1023] intValue];
    UISwitch *tetherSw = (UISwitch *)[cell.contentView viewWithTag: kDefaultSwTag];
    tetherSw.on = (tetherState == currValState);

    // Return
    return cell;

}

См. Документы для dequeueReusableCellWithIdentifier для получения дополнительной информации о снятии очереди.

Кроме того, убедитесь, что нет прозрачности ни в одном из подпредставлений вашей ячейки. Это вызывает много отставаний. Убедитесь, что на всех надписях или добавленных вами объектах установлен opaque = YES и задан цвет фона.

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

Это не имеет значения.Ваша клетка сложна, и поэтому ваш взгляд отстает.

Если вы хотите производительности, избегайте UISwitch.Вместо этого установите флажок ячейки.Фактически, просто избегайте каких-либо необычных подклассов ячеек табличного представления или пользовательских фонов, чтобы уменьшить размер иерархии представлений.

0 голосов
/ 25 января 2010

На самом деле, мои таблицы настроены просто отлично.Твердое восстановление сделало свое дело, и мое приложение работает без вышеупомянутой "LAG"

...