iOS viewDidLoad引起的控件多次创建

使用reveal观察程序的UI层次时,发现有个地方非常奇怪,viewController的view上面存在两个相同的内容的tableView。仔细查看tableView的创建的方式

- (UITableView *)tableView {

        if (nil == _tableView) {
            _tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];
            
            _tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight;
            _tableView.delegate = self;
            _tableView.dataSource = self;
            _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
            _tableView.showsVerticalScrollIndicator = NO;
            _tableView.showsHorizontalScrollIndicator = NO;
            _tableView.tableFooterView = [UIView new];
            
            [self.view addSubview:_tableView];
        }
    return _tableView;
}

懒加载,没有问题啊。在这个位置下个断点,tableView的确被创建了两次,这就奇怪了。问题几乎可以断定出在这个创建方法里面,因为一旦创建完成,就不会再进入

if (nil == _tableView) {

}

分析一下应该是在执行

_tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain];

的时候,self.view=nil,这个时候就会去创建self.view。self.view创建以后,系统自动调用了viewDidLoad,viewDidLoad里面又调用了self.tableView,又进入了懒加载的方法中,这个时候,alloc方法还没有执行完,_tableView=nil.

你可能感兴趣的:(iOS viewDidLoad引起的控件多次创建)