iOS-当全局计算发生时

iOS-当全局计算发生时,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我想知道iOS/Swift的上述课程 何时在运行时准备FoodUtils.getFoodList() 好的做法是什么?在viewDidLoad内还是在类范围内准备列表?对于这两种情况,UIViewController的哪个生命周期将影响运行时的内存 在代码中(对象初始化): 昂贵的操作是在创建视图控制器实例时执行的 在代码中(viewDidLoad内): 一旦接口元素(IB插座)与viewcontroller挂钩并加载视图,就会执行昂贵的操作 实际上,这没有什么区别,因为viewDidLoad是

我想知道iOS/Swift的上述课程

  • 何时在运行时准备
    FoodUtils.getFoodList()
  • 好的做法是什么?在viewDidLoad内还是在类范围内准备列表?对于这两种情况,UIViewController的哪个生命周期将影响运行时的内存
  • 在代码中(对象初始化):

    昂贵的操作是在创建视图控制器实例时执行的

    在代码中(viewDidLoad内):

    一旦接口元素(IB插座)与viewcontroller挂钩并加载视图,就会执行昂贵的操作

    实际上,这没有什么区别,因为viewDidLoad是在使用SEGUES初始化类之后执行的(对于以编程方式显示的VCs,请阅读末尾的注释)

    如果您谈论的操作可能需要几秒钟的时间,那么最佳做法是,在显示忙碌视图(带有活动指示器的视图)时,在显示视图控制器之前执行昂贵的操作

    或者,您可以在ViewDidDisplay方法中执行此操作,并在显示活动指示器的情况下启动视图控制器,然后在昂贵的操作完成后,隐藏活动指示器并加载数据

    事实上,第二种方法非常常用,特别是在显示大数据列表时。在使用以旋转指示器开始直到数据准备好显示的应用程序时,您一定看到了它


    注意:

    如果以编程方式显示视图控制器,则可以分离这两个函数的计时,因为第一个函数是在使用“从nib加载”方法时执行的。而第二个是在您实际尝试访问其中的任何视图时执行的


    注2:

    昂贵的网络操作应该总是在后台线程上执行,这样UI就不会被阻塞。这就是为什么人们在后台检索信息时经常显示活动指示器

    在代码中(对象初始化):

    昂贵的操作是在创建视图控制器实例时执行的

    在代码中(viewDidLoad内):

    一旦接口元素(IB插座)与viewcontroller挂钩并加载视图,就会执行昂贵的操作

    实际上,这没有什么区别,因为viewDidLoad是在使用SEGUES初始化类之后执行的(对于以编程方式显示的VCs,请阅读末尾的注释)

    如果您谈论的操作可能需要几秒钟的时间,那么最佳做法是,在显示忙碌视图(带有活动指示器的视图)时,在显示视图控制器之前执行昂贵的操作

    或者,您可以在ViewDidDisplay方法中执行此操作,并在显示活动指示器的情况下启动视图控制器,然后在昂贵的操作完成后,隐藏活动指示器并加载数据

    事实上,第二种方法非常常用,特别是在显示大数据列表时。在使用以旋转指示器开始直到数据准备好显示的应用程序时,您一定看到了它


    注意:

    如果以编程方式显示视图控制器,则可以分离这两个函数的计时,因为第一个函数是在使用“从nib加载”方法时执行的。而第二个是在您实际尝试访问其中的任何视图时执行的


    注2:


    昂贵的网络操作应该总是在后台线程上执行,这样UI就不会被阻塞。这就是为什么人们在后台检索信息时经常显示活动指示器

    FoodUtils.getFruitList()
    调用一些url或数据库请求?@AdrianBobrowski让它调用一些数据库操作。更好的做法是在
    viewDidLoad
    中创建列表,特别是当它是一个数据库操作时。为什么这是更好的做法?请您解释更多?我正在编写更多解释答案,但@Pochi更快。我认为这是一个很好的答案
    FoodUtils.getFruitList()
    调用一些url或数据库请求?@AdrianBobrowski让它调用一些数据库操作。更好的做法是在
    viewDidLoad
    中创建列表,特别是如果它是一个数据库操作。为什么这是一个更好的做法?请您解释更多?我正在编写更多解释答案,但是@Pochi跑得更快。我认为这是很好的回答谢谢你的详细解释。这很有帮助。谢谢你的详细解释。这很有帮助。
    class HealthViewController: UIViewController {
    
        var foods: [Food] = FoodUtils.getFoodList() // some expensive operations
        var fruits: [Fruit];
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.fruits = FoodUtils.getFruitList() // some expensive operations
        }
    }
    
    var foods: [Food] = FoodUtils.getFoodList() // some expensive operations
    
    self.fruits = FoodUtils.getFruitList() // some expensive operations