1

私のアプリのほとんどのビューは、UIViewController内のUITableVlewsです。テーブルをスクロールしようとすると、アプリが遅れているように感じます。(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;
}

-または-

-(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];
            }
}
4

3 に答える 3

1

それは問題ではありません。セルが複雑であるため、ビューが遅れます。

パフォーマンスが必要な場合は、を避けてくださいUISwitch。代わりに、セルのチェックマークを切り替えます。実際、ビュー階層のサイズを小さくするために、派手なテーブルビューセルのサブクラスやカスタム背景は避けてください。

于 2010-01-17T07:20:10.607 に答える
1

セルを適切にデキューして再利用していますか?

@ "SwitchCell"などのセルを再利用すると、スクロールが大幅に高速化され、処理が大幅に最適化されます。現在、セルのコンテンツビューへのスイッチの追加(ビューのレイアウトなど)や、スクロール中に新しいセルが表示されるたびにではなく、セルの存続期間中に1回だけ実行する必要がある他のタスクの実行に多くの時間が費やされます。

- (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に背景色が設定されていることを確認してください。

于 2010-01-17T07:33:21.563 に答える
0

実際、私のテーブルはうまくセットアップされています。しっかりとした復元でうまくいき、私のアプリは前述の「LAG」なしで実行されます

于 2010-01-25T00:49:28.740 に答える