0

以下のコードを使用して、View Controller から View Controller に移行するアプリがあります。

[self addChildViewController:self.aNewViewController];
    [self transitionFromViewController:self.currentViewController
                      toViewController:self.aNewViewController
                              duration:1.0
                               options:UIViewAnimationOptionTransitionFlipFromBottom
                            animations:nil
                            completion:^(BOOL finished) {
                                [self.aNewViewController didMoveToParentViewController:self];
                                [self.currentViewController removeFromParentViewController];
                                self.currentViewController=self.aNewViewController;
                            }];

iOS 5.0 デバイスで Xcode 4.3 を使用して実行すると、非常にスムーズに実行され、約 30 ~ 50 mb が使用されます。任意のデバイスで Xcode 4.5 を使用して実行すると、View Controller を変更するたびにアプリが 30 - 70 - 100 - 130 mb にジャンプするため、クラッシュします。ビューコントローラーを離れるたびにメモリが解放されていないようです。ARCを使用しています。

ご協力いただきありがとうございます。

4

1 に答える 1

1

ここに関係する各ビュー コントローラの dealloc() に、一意の文字列を含むログ メッセージを追加し、移行に関係する VC が解放されているかどうかを確認します。リリースされていないものは明らかに問題です。探すべきものは保持サイクルです - デリゲートまたはそれを保持する同様のパラメーターを取るそれらの ivar/プロパティ。たとえば、NSTimer はメッセージを送信するオブジェクトを保持します。

これを見つけることができた場合の解決策は、所有者を保持しないようにそれらのオブジェクトが変更されることを保証することにより、リリースの準備をする VC に新しいメソッドをコーディングすることです (NSTimer の場合は、それを無効にしてから nil にします)。

この新しいメッセージは、遷移完了ブロックで送信できます。

于 2012-09-30T12:27:23.360 に答える