使用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.