0

使用: Xcode 4.6 ストーリーボード ARC モデル セグエ to SecondViewController

デバイスが右に回転したときに新しい veiwController をロードするメイン ViewController を持つアプリがあります。アプリが起動すると、すべてがうまく機能します。デバイスを回転させてから、2 番目のビュー コントローラーをアンロードすると、約 15 ~ 20 回、アプリの動作が非常に遅くなります。2番目のView Controllerがロードされたときにのみ発生し、デバイスを何回も回転させたときにのみ発生することを絞り込みました。また、メモリの問題であると絞り込みました。使用済みおよび使用可能なメモリを追跡するアプリをインストールしました。デバイスを何度も回転させると、メモリが 400mb から 900mb になります。できるだけ多くの情報を提供しようとしています。各ビューには、毎秒起動する 8 つの NSTimer があります。

ビューがアンロードされていることを確認するために、プログラムでビューをアンロードする方法はありますか?

ロードとアンロードを確実にするために、次のコードを含めました。

`- (void)setView:(UIView *)aView { NSLog(@">>> Entering %s <<<", PRETTY_FUNCTION );

if (!aView)         // view is being set to nil
{
    NSLog(@"Should be unloading now");
}

[super setView:aView];

NSLog(@"<<< Leaving %s >>>", __PRETTY_FUNCTION__);

}

ログ結果: 2013-04-22 16:42:03.588 xxxxxxxx[xxxxxxx] >>> 入力 -[GraphViewController setView:] <<< 2013-04-22 16:42:03.589 xxxxxxxx[xxxxxxx] <<< 終了 -[ GraphViewController setView:] >>>

` これを修正するために何を見ればよいかわかりません。

正しい方向への「ポイント」は非常に高く評価されます。

ありがとう

4

1 に答える 1

2

SecondViewController を「アンロード」する方法については、あまり情報を提供していません。それにモーダルセグエも行っていますか?もしそうなら、それはあなたの問題です-セグエを行うたびに、新しいビューコントローラーをインスタンス化します。これらがモーダルセグエである場合、提示されたコントローラーには提示コントローラーへの強力なポインターがあるため、これらのコントローラーの割り当てが解除されることはありませんあなたが行ったり来たりするとき。

原則として、アンワインド セグエ以外を使用して、ストーリーボードを逆戻りしないでください。したがって、問題の解決策は、アンワインド セグエを使用して SecondViewController から MainViewController に戻ることです。これは実際には、元の MainViewController の同じインスタンスに戻り、SecondViewController の割り当てが解除されます。巻き戻しのセグエを作成する方法がわからない場合は、回答を編集してその方法を示します。

編集後:

アンワインド セグエを作成するには、2 つのことを行います。戻ってくるコントローラーにメソッドを追加します。2 つの重要な点は、それが IBAction であることと、UIStoryboardSegue* に入力される単一の引数を持っていることです。それを何と呼ぶか​​は問題ではなく、その中にコードを入れる必要さえありませんが、私は通常、それが呼び出されたことを確認するためだけにログ ステートメントを入れます。次に、アンワインド元のコントローラーの IB で、ボタンやテーブル ビュー セルなどの UI 要素から (コードから起動する場合はコントローラー自体から)、緑色の終了アイコンまでドラッグを制御します。シーンの下部 -- コントローラー間ではなく、同じコントローラー内の UI 要素から exit アイコンにドラッグしていることに注意することが重要です。終了アイコンの上でドラッグを放すと、上記の署名で作成したメソッドが表示されます。必要なものを選択してください。宛先コントローラーに情報を戻したい場合は、他のセグエと同様に、ソース コントローラーに prepareForSegue を実装できます。

于 2013-04-23T03:08:42.187 に答える