美文网首页
viewDidLoad 多次创建视图对象

viewDidLoad 多次创建视图对象

作者: LiYaoPeng | 来源:发表于2019-07-12 18:58 被阅读0次

-(void)viewDidLoad多次创建视图对象

场景

  1. 外部创建vc,并在对vc属性赋值时(vc.dataSource = @[]),

  2. 在vc内部dataSource属性的set方法中调用了懒加载控件tableView,这时候,会进入到tableView的懒加载方法中,并创建tableView1

  3. 如果在tableView 1被创建完成之前,引用了vc.view,

    (比如:_tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];)

  4. 如果这个时候,vc.view == nil;则会调用vcviewDidLoad 方法,创建vcview

  5. 如果在ViewDidLoad 方法中,调用了self.tableView,那么就又会进入tableView的懒加载方法中,再次创建一个tableView2

  6. 如果 然后 在viewDidLoad 中 进行了[self.view addSubview: self.tableView]这时候添加的应该是tableView2

  7. 运行完vcviewDidLoad方法后,会继续回到tableView1的懒加载中,进行创建tableView1

  8. 这时vc的懒加载属性 tableView应该为tableView1,而在vc.view视图上的tableView应该为tableView2

代码示例

  1. 外部创建vc

     UIViewController *vc = [UIViewController new]
     vc.dataSource = @[];
    
  2. vc内部

    - (void)setDataSource:(NSArray<NSString *> *)dataSource {
        _dataSource = dataSource;
        [self.tableView reloadData];
    }
    
    
    - (UITableView *)tableView{
        if (!_tableView) {
            _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];
            _tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
           //register cell
         ...
        }
        return _tableView;
    }
    

解决

1. 在tableView懒加载内部不要使用self.view

相关文章

网友评论

      本文标题:viewDidLoad 多次创建视图对象

      本文链接:https://www.haomeiwen.com/subject/bjnykctx.html