Почему CellForRow: 17 вызовов в Xcode 9.3 - PullRequest
0 голосов
/ 10 мая 2018

Я написал демо на 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

1 Ответ

0 голосов
/ 10 мая 2018

Я проверю это из небольшой демонстрации. в если код

if (!cell) {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:idf];
    cell.contentView.backgroundColor = [UIColor cyanColor];
}

будет вызывать количество строк в табличном представлении. Но там есть только UITableViewCellContentView и _UITableViewCellSeparatorView. Я надеюсь, что это поможет вам.

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