Ios UITableView重新加载数据、重新加载节:withRowAnimation:和重新加载RowSatindExpaths:withRowAnimation:的性能:

Ios UITableView重新加载数据、重新加载节:withRowAnimation:和重新加载RowSatindExpaths:withRowAnimation:的性能:,ios,objective-c,uitableview,reloaddata,Ios,Objective C,Uitableview,Reloaddata,我构建了一个测试用途的应用程序来测试这三种方法在重新加载表视图时的性能 // //ViewController.m //TableViewSample // //由Antonio081014于2015年8月2日创建。 //版权所有(c)2015 Antonio081014.com。版权所有。 // #导入“ViewController.h” @界面视图控制器() @属性(非原子、强)NSArray*卡片列表; @属性(非原子,强)NSIndexPath*selectedIndexPath; @

我构建了一个测试用途的应用程序来测试这三种方法在重新加载表视图时的性能

//
//ViewController.m
//TableViewSample
//
//由Antonio081014于2015年8月2日创建。
//版权所有(c)2015 Antonio081014.com。版权所有。
//
#导入“ViewController.h”
@界面视图控制器()
@属性(非原子、强)NSArray*卡片列表;
@属性(非原子,强)NSIndexPath*selectedIndexPath;
@结束
@实现视图控制器
-(无效)viewDidLoad{
[超级视图下载];
//加载视图后,通常从nib执行任何其他设置。
NSMutableArray*列表=[NSMutableArray];
对于(inti=0;i,苹果表示:

重新加载一行会导致表视图向其数据源请求该行的新单元格。表会在设置旧行的动画时设置新单元格的动画

当您调用
reloadrowsatindexpaths
时,一个新的单元格将被初始化用于动画,而我们已经知道,
reloadData
将重用以前的单元格


我想这可以解释这个问题。

重新加载数据
不必(可选)为单个单元格的重新加载设置动画。(我注意到您实际上没有向我们显示任何代码。)@HotLicks,很抱歉,我尝试了正确的格式,但没有成功。您可以在尝试“编辑”时检查我的源代码吗?非常感谢。选择代码并单击
{}
按钮。这不是火箭科学。答案是因为
重新加载数据
没有任何动画,不像
重新加载节:withRowAnimation
重新加载RowSatinExpaths:withRowAnimation
在重新加载tableView的行/单元格之前验证动画,这也适用于collectionView。
//
//  ViewController.m
//  TableViewSample
//
//  Created by Antonio081014 on 8/2/15.
//  Copyright (c) 2015 Antonio081014.com. All rights reserved.
//

#import "ViewController.h"

@interface ViewController () <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, strong) NSArray *listOfCards;
@property (nonatomic, strong) NSIndexPath *selectedIndexPath;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    NSMutableArray *list = [NSMutableArray array];
    for (int i=0; i<15; i++) {
        NSString *carName = [NSString stringWithFormat:@"Car%d", arc4random() % 15];
        [list addObject:carName];
    }
    self.listOfCards = list;
    self.tableView.delegate = self;
    self.tableView.dataSource = self;
    self.selectedIndexPath = nil;

    UIBarButtonItem *table = [[UIBarButtonItem alloc] initWithTitle:@"Table" style:UIBarButtonItemStylePlain target:self action:@selector(reloadTable:)];
    UIBarButtonItem *section = [[UIBarButtonItem alloc] initWithTitle:@"Section" style:UIBarButtonItemStylePlain target:self action:@selector(reloadSection:)];
    UIBarButtonItem *indexPath = [[UIBarButtonItem alloc] initWithTitle:@"IndexPath" style:UIBarButtonItemStylePlain target:self action:@selector(reloadRow:)];

    self.navigationItem.rightBarButtonItems = @[table, section, indexPath];
//    self.navigationController.navigationItem.rightBarButtonItems = @[table, section, indexPath];
}

- (void)reloadTable:(UIBarButtonItem *)barItem
{
    [self.tableView reloadData];
}

- (void)reloadRow:(UIBarButtonItem *)barItem
{
    [self reloadRowAtIndexPath:self.selectedIndexPath forBarButtonItem:barItem];
}

- (void)reloadSection:(UIBarButtonItem *)barItem
{
    [self reloadSectionAt:0 forBarButtonItem:barItem];
}

- (void)reloadRowAtIndexPath:(NSIndexPath *)indexPath forBarButtonItem:(UIBarButtonItem *)barItem
{
    if (indexPath) {
        [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

- (void)reloadSectionAt:(NSUInteger)section forBarButtonItem:(UIBarButtonItem *)barItem
{
    [self.tableView reloadSections:[[NSIndexSet alloc] initWithIndex:section] withRowAnimation:UITableViewRowAnimationAutomatic];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    NSLog(@"Asking Number of Sections in TableView");
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"Asking Number of Rows in Section");
    return self.listOfCards.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];

    NSString *carName = self.listOfCards[indexPath.row];
    cell.textLabel.text = carName;

    return cell;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedIndexPath = indexPath;
    NSLog(@"Did Select Cell %@", indexPath);
}

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.selectedIndexPath = nil;
    NSLog(@"Did Deselect Cell %@", indexPath);
}

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Will Display Cell %@", indexPath);
}

- (void)tableView:(UITableView *)tableView didEndDisplayingCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Did End Display Cell %@", indexPath);
}

- (void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"Did Highlight Cell %@", indexPath);
}

@end
ReloadData 2015-08-03 11:00:51.556 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 11} 2015-08-03 11:00:51.558 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 10} 2015-08-03 11:00:51.559 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 9} 2015-08-03 11:00:51.560 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 8} 2015-08-03 11:00:51.560 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 7} 2015-08-03 11:00:51.560 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 6} 2015-08-03 11:00:51.561 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 5} 2015-08-03 11:00:51.561 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 4} 2015-08-03 11:00:51.562 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 3} 2015-08-03 11:00:51.563 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 2} 2015-08-03 11:00:51.563 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 1} 2015-08-03 11:00:51.564 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 0} 2015-08-03 11:00:51.564 TableViewSample[324:90811] Asking Number of Sections in TableView 2015-08-03 11:00:51.565 TableViewSample[324:90811] Asking Number of Rows in Section 2015-08-03 11:00:51.566 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 0} 2015-08-03 11:00:51.567 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 1} 2015-08-03 11:00:51.567 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 2} 2015-08-03 11:00:51.568 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 3} 2015-08-03 11:00:51.569 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 4} 2015-08-03 11:00:51.569 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 5} 2015-08-03 11:00:51.570 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 6} 2015-08-03 11:00:51.571 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 7} 2015-08-03 11:00:51.572 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 8} 2015-08-03 11:00:51.573 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 9} 2015-08-03 11:00:51.573 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 10} 2015-08-03 11:00:51.574 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 11} ReloadSection 2015-08-03 11:02:21.641 TableViewSample[324:90811] Asking Number of Sections in TableView 2015-08-03 11:02:21.642 TableViewSample[324:90811] Asking Number of Sections in TableView 2015-08-03 11:02:21.643 TableViewSample[324:90811] Asking Number of Rows in Section 2015-08-03 11:02:21.647 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 0} 2015-08-03 11:02:21.649 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 1} 2015-08-03 11:02:21.651 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 2} 2015-08-03 11:02:21.653 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 3} 2015-08-03 11:02:21.655 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 4} 2015-08-03 11:02:21.657 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 5} 2015-08-03 11:02:21.659 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 6} 2015-08-03 11:02:21.662 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 7} 2015-08-03 11:02:21.664 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 8} 2015-08-03 11:02:21.666 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 9} 2015-08-03 11:02:21.669 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 10} 2015-08-03 11:02:21.671 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 11} 2015-08-03 11:02:21.990 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 0} 2015-08-03 11:02:21.991 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 1} 2015-08-03 11:02:21.992 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 2} 2015-08-03 11:02:21.992 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 3} 2015-08-03 11:02:21.993 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 4} 2015-08-03 11:02:21.994 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 5} 2015-08-03 11:02:21.994 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 6} 2015-08-03 11:02:21.995 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 7} 2015-08-03 11:02:21.995 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 8} 2015-08-03 11:02:21.996 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 9} 2015-08-03 11:02:21.997 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 10} 2015-08-03 11:02:21.997 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 11} ReloadRow 2015-08-03 11:03:00.012 TableViewSample[324:90811] Did Highlight Cell {length = 2, path = 0 - 3} 2015-08-03 11:03:00.015 TableViewSample[324:90811] Did Select Cell {length = 2, path = 0 - 3} 2015-08-03 11:03:00.907 TableViewSample[324:90811] Asking Number of Sections in TableView 2015-08-03 11:03:00.908 TableViewSample[324:90811] Asking Number of Sections in TableView 2015-08-03 11:03:00.909 TableViewSample[324:90811] Asking Number of Rows in Section 2015-08-03 11:03:00.910 TableViewSample[324:90811] Will Display Cell {length = 2, path = 0 - 3} 2015-08-03 11:03:01.217 TableViewSample[324:90811] Did End Display Cell {length = 2, path = 0 - 3}