我在Xcode 9.3上写了一个演示。模拟器是11.3。我创建了一个UITableView并实现了一个使用重用机制的代理方法。当我将单元格行高度设置为仅显示1个单元格并打印cellForRow:方法时。打印结果被调用17次。然后我使用旧版本的Xcode运行相同的代码,但它只被调用了2次。这意味着Xcode 9.3并没有真正实现单元重用机制。任何人都可以解释这个问题吗?
@interface ViewController () <UITableViewDelegate, UITableViewDataSource>
@property (nonatomic, strong) UITableView *tableView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
if (!_tableView) {
_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
_tableView.delegate = self;
_tableView.dataSource = self;
[self.view addSubview:_tableView];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//NSLog(@"%ld",indexPath.row);
static NSString *idf = @"idf";
//UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:idf];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:idf];
NSLog(@"create");
}
return cell;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 100;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 2000;
}
@end
输出:
2018-05-10 18:28:51.685711+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.697077+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.697953+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.698667+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.699238+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.699804+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.700625+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.701282+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.701997+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.702789+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.703488+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.704152+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.704767+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.705374+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.706024+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.706673+0800 TableviewDemo[65561:3827232] create
2018-05-10 18:28:51.707334+0800 TableviewDemo[65561:3827232] create
答案 0 :(得分:0)
我从一个小演示中检查这个。如果代码
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:idf];
cell.contentView.backgroundColor = [UIColor cyanColor];
}
将调用tableview中的行数。但是只包含UITableViewCellContentView和_UITableViewCellSeparatorView。我希望这会对你有所帮助。