2

UINavigationController があり、UINavigationBar にボタンがあります。このボタンを押すと、新しい UINavigationController が UIModalPresentationFormSheet としてモーダルに表示されます。これは機能します。

しかし、フォームシートの表示にはかなりの時間がかかることがわかりました。アクション メソッドに 2 つのログ ("start" と "finish"、以下のコードを参照) を配置しました。1 つは最初の行、もう 1 つは最後の行です。ログ時間は、このコードを実行するのに約 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% を占めます。

ここで何が起こっているのか、それを最適化する方法を知っている人はいますか?

4

3 に答える 3

2

を でプリロードするUINavigationControllerためFooViewController、提示すると、既にメモリ内に存在します。

おそらく時間がかかるのは、FooViewControllerインスタンスのビューの読み込みです。

何かを行うことで、ロードすることができます。お気に入り

UIView *view = fooContr.view;

これは、モーダル ビュー コントローラーを表示するボタンがクリックされる前に行う必要があります。それ以外の場合は、おそらく同じ効果があります。

于 2012-06-01T09:05:09.267 に答える
0

パフォーマンスの問題は、自分navContrManAufn自身を作成するのに時間がかかるためであるに違いありません。initで何を実行しますか?

于 2012-06-01T09:02:42.637 に答える
0

viewControllers の init にあるコードを最小限に抑え、可能な場合はコードを viewDidLoad に移動するか、必要に応じて viewDidAppear に移動します (1 回だけ実行するコードは viewDidload にある必要があります)。

于 2012-06-01T09:09:26.963 に答える