viewDidLoad vs viewWillAppear在哪里设置tableview&它的数据源?

时间:2016-05-11 22:33:52

标签: ios objective-c datasource viewdidload viewwillappear

我有一个UIViewController子类,我有一个UITableView。这是我使用viewDidLoad&的方法。 viewWillAppear到目前为止。

-(void)viewDidLoad
{
    //Setup my datasource
    //Setup my views, tableviews, constraints
}

-(void)viewWillAppear:(BOOL)animated
{
    //Setup my datasource
}
构建视图时,只会调用

viewDidLoad一次。每次访问视图控制器时都会调用viewWillAppear

这里,为什么我在两个地方设置数据源(NSArray),每当我进入viewcontroller时,我只需要重建数据源数组。

我可以这样做。

-(void)viewDidLoad
{
    //Setup my views, tableviews, constraints
}

-(void)viewWillAppear:(BOOL)animated
{
    //Setup my datasource
    //Reload tableview
}

但是,当视图控制器出现时,显示数据时感觉有点慢。

问题:

设置数据源阵列的最佳做法是什么?我只想在viewWillAppear中设置延迟,我不想要延迟。或者我应该像这样设置数据源吗?

-(void)viewDidLoad
    {
        //Setup my datasource
        //Setup my views, tableviews, constraints
    }

    -(void)viewWillAppear:(BOOL)animated
    {
        //Setup my datasource
        //Reload tableview
    }

如果是,那么我第一次需要计算两次数据源数组。

要解决此问题,我需要在BOOL中设置 isFirstTime (存储在NSUserDefaults)中的viewDidLoad值并将其检入viewWillAppear方法如下:

        -(void)viewDidLoad
        {
            //Set isFirstTime as YES
            //Setup my datasource
            //Setup my views, tableviews, constraints
        }

        -(void)viewWillAppear:(BOOL)animated
        {
            if(isFirstTime)
            {
               //Skip
               isFirstTime = NO;
            }

            else
            {
               //Setup my datasource
               //Reload tableview
            }
        }

我真的应该做这么多复杂的事情来实现这个目标吗?建议需要!!

由于

1 个答案:

答案 0 :(得分:0)

只需在viewdidload中设置视图和数据源。您不需要在viewwillappear中设置数据源增益,甚至不需要在视图willappear中重新加载数据,因为当再次呈现视图时,表会自动重新加载