【发布时间】:2014-04-08 12:28:27
【问题描述】:
抱歉,这本身可能不是一个编程问题,而更多的是对 iOS 生命周期函数性质的询问。
我有一个应用程序,其中我有一个创建四个数组并通过数据库查询填充它们的函数。起初,我从viewDidLoad 函数中调用了该函数,但是,每当加载视图时,视图实际出现之前都需要一些时间(大约 3-4 秒)。所以我所做的是我创建了一个activityViewIndicator,而我的viewDidLoad 函数看起来像:
- (void)viewDidLoad:(BOOL)animated{
[super viewDidLoad];
NSLog(@"viewDidLoad Entered");
[self.activityIndicatorView startAnimating];
partInput.delegate = self;
brandInput.delegate = self;
barcodeInput.delegate = self;
itemNameInput.delegate = self;
//initializeArrays is the function that initializes the arrays
[self initializeArrays];
[self.activityIndicatorView stopAnimating];
}
但是这不起作用,因为当应用程序仍在前一个视图中时会触发viewDidLoad 函数。视图仅在viewDidLoad 完成后才会显示。所以我所做的就是将数组初始化移动到我的 viewDidAppear 函数,它看起来像:
- (void)viewDidAppear:(BOOL)animated{
NSLog(@"viewDidAppear loaded successfully");
[self.activityIndicatorView startAnimating];
partInput.delegate = self;
brandInput.delegate = self;
barcodeInput.delegate = self;
itemNameInput.delegate = self;
[self initializeArrays];
[self.activityIndicatorView stopAnimating];
}
但是,当我部署它时,没有任何延迟,使 activityIndicatorView 无用。
我的问题是,为什么在我看来 viewDidLoad 和 viewDidAppear 之间存在“性能差异”?
【问题讨论】:
-
您的方法
initializeArrays是否在单独的线程中进行初始化?如果没有,那么您将无法获得动画。 -
我不这么认为。我没有明确地实现多线程。
-
当您致电
viewDidLoad时,可能发生了很多事情,这会导致延迟。你可以用viewDidAppear“懒惰地”加载你的VC。这将允许您在后台任务不进行时做任何事情。 -
您如何量化 viewDidLoad 和 viewDidAppear 之间的性能差异?
标签: ios objective-c