0

スワイプジェスチャ認識エンジンによって起動されるカスタムセグエを持つ2つのビューコントローラーがあります。

カスタム セグエは次のとおりです。

-(void)perform{
UIViewController *sourceViewController = (UIViewController*)[self sourceViewController];
UIViewController *destinationController = (UIViewController*)[self destinationViewController];

CATransition* transition = [CATransition animation];
transition.type = kCATransitionPush;
transition.subtype = kCATransitionFromRight;

[sourceViewController.navigationController.view.layer addAnimation:transition forKey:kCATransition];
[sourceViewController.navigationController pushViewController:destinationController animated:NO];
}

それは機能しますが、毎回メモリを増やします。私はこの解決策を見つけました:以前のViewControllerのメモリをクリアする方法

しかし、viewController の名前にスワイプしたときにメインの viewController を入れると、それ自体になり、secondViewController の名前を入れるとクラッシュします。

メモリの問題を解決するにはどうすればよいですか? ありがとうございます。

4

1 に答える 1

1

あなたの質問を正しく理解していれば、セグエが実行されるたびにメモリが増加するのは当然のことです。その性質上、ナビゲーションコントローラーは、新しいコントローラーを追加するたびにスタックにプッシュし続けるからです。ナビゲーション コントローラー スタックからこれらのビュー コントローラーへのポインターを引き続き取得できるため、これはリークではなく、メモリの一部へのすべての参照を失うとリークが発生します。ナビゲーション コントローラーを使用する場合、このメモリの増分から逃れることはできません。これは本来の用途です (ただし、各ソース ビュー コントローラーが使用しているリソースを解放し、必要に応じて新しいビュー コントローラーをスタックにプッシュする前に再作成することができます)。 .

おそらく問題は、ナビゲーション コントローラーを使用したくないということですか? 達成したいことについて詳しく教えていただければ、もっと役立つかもしれません。

于 2013-05-23T12:26:35.753 に答える