2012-06-01 5 views
2

У меня есть UINavigationController и на UINavigationBar у меня есть кнопка. Когда я нажимаю эту кнопку, новый UINavigationController представляется в виде UIModalPresentationFormSheet. Это работает.presentModalViewController занимает много времени

Но я узнал, что презентация FormSheet довольно трудоемка. Я поместил два журнала в метод действия («start» и «finish», см. Код ниже), один в первом и один в последней строке. Время регистрации говорит мне, что для запуска этого кода требуется около 1,5-2 секунд.

То метод действий вызывается из UINavigationItem:

- (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? Вероятно, это что-то там, которое потребляет время (вызов db?) – Panagiotis

ответ

2

Предварительно загрузите UINavigationController с помощью FooViewController, поэтому, когда вы его представляете, он уже находится в памяти.

Возможно, что так много времени занимает загрузка экземпляра объекта FooViewController.

Вы можете заставить его загрузиться, сделав что-то с ним. Как

UIView *view = fooContr.view;

Вы должны сделать это до кнопки, которая представляет модальный вид контроллер получает щелкнул. В противном случае это, вероятно, будет иметь тот же эффект.

+0

или просто '[fooContr view]', нет необходимости его назначать. – Cyrille

+0

Я попробую! – user944351

+0

Хорошо, дайте мне знать, как это происходит :) –

0

Проблема с производительностью должна быть связана с тем, что ваше navContrManAufn требует времени, чтобы создать себя. Что он выполняет при init?

0

Минимизируйте код, который у вас есть в вашем init в viewControllers, переместите код в viewDidLoad, где это возможно, или даже viewDidAppear, если необходимо (код, предназначенный для запуска только один раз, должен быть в viewDidload).

Смежные вопросы