2012-06-01 74 views
2

我有一個UINavigationController和UINavigationBar我有一個按鈕。當我按下這個按鈕時,一個新的UINavigationController被模態地呈現爲一個UIModalPresentationFormSheet。這工作。presentModalViewController耗時操作

但我認識到FormSheet的表現是非常耗時的。我在action方法中放置了兩個日誌(「start」和「finish」,見下面的代碼),第一個在最後一行,另一個在最後一行。日誌時間告訴我,運行此代碼需要大約1.5到2秒。

那是從UINavigationItem調用Action方法:

- (IBAction)addBtnPressed:(id)sender{ 
    NSLog(@"start"); 

    FooViewController *fooContr = [[FooViewController alloc] init]; 
    fooContr.delegate = self; 
    UINavigationController *navContr = [[UINavigationController alloc] initWithRootViewController:fooContr]; 
    [fooContr release]; 
    navContr.modalPresentationStyle = UIModalPresentationFormSheet; 

    [self.navigationController presentModalViewController:navContr animated:YES]; 

    [navContr release]; 

    NSLog(@"finish"); 

}

看來,線

[self.navigationController presentModalViewController:navContr animated:YES]; 

需要90%的時間。

有沒有人知道這裏發生了什麼,以及如何優化?

+0

navContrManAufn包含什麼?可能它會消耗時間(數據庫調用?) – Panagiotis

回答

2

預加載UINavigationControllerFooViewController,所以當你呈現它時,它已經在內存中。

可能需要這麼多時間的是加載FooViewController實例的視圖。

你可以通過對它做些什麼來加載它。像

UIView *view = fooContr.view;

你應該呈現模態視圖控制器被點擊的按鈕之前做到這一點。否則它可能會有相同的效果。

+0

或只是'[fooContr視圖]',不需要分配它。 – Cyrille

+0

我會試一試! – user944351

+0

好吧,讓我知道它是怎麼回事:) –

0

性能問題必須是因爲您的navContrManAufn需要時間來創建它自己。它在初始化時執行了什麼?

0

儘量減少viewController中init中的代碼,儘可能將代碼移動到viewDidLoad,或者甚至將viewDidAppear移動到合適的地方(代碼只能運行一次viewDidload)。

相關問題