對不起,但這本身可能不是一個編程問題,而更多的是關於iOS生命週期功能性質的問題。iOS 7 - viewDidLoad和viewDidAppear之間的區別
我有一個應用程序,我有一個函數創建四個數組並通過數據庫查詢填充它們。起初,我從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'是否在單獨的線程中進行初始化?如果沒有,那麼你不會得到動畫。 – ThomasW
我不這麼認爲。我沒有明確實現多線程。 – Razgriz
當您調用'viewDidLoad'時,可能會有很多事情正在進行,這會導致延遲。你可以用「viewDidAppear」加載你的VC。這將允許您在後臺任務未執行時執行任何操作。 –