0

アプリでメモリ リークとクラッシュが発生しています。コンテナの View Controller が View Controller 間で切り替わる方法が原因であるかどうかを知りたいです。アプリは、ユーザーが長い一連のページをナビゲートできるようにする必要があります。各ページは、ストーリーボードの ViewController としてレイアウトされます (各ページには識別子として番号があります)。

アプリの 14 ページに到達するまでに、Instruments のアクティビティ モニターで、アプリが (iPad 3 で) 約 600MB のメモリを必要とすることがわかります。これは、各ビュー コントローラーに大きな画像を含む UIImageView があるためです。

ARCを使用しています。

以下は、コンテナ View Controller のコードです。メモリ管理の問題がどこかに見られますか?

@implementation PageNavigator

int startingPage = 0;
int currentPage = 0;

-(void)viewDidAppear:(BOOL)animated{
    NSLog(@"Starting book from page %d", startingPage);

    //do this only the first time the app runs
    if(startingPage != -1){
        UIViewController *currentPageVC = [self.storyboard instantiateViewControllerWithIdentifier:[NSString stringWithFormat:@"%d", startingPage]];
        [self presentModalViewController:currentPageVC animated:YES];
        currentPage = startingPage;
        startingPage = -1;
    }
}

//currentPageVC and its outlets should get released when it gets out of scope, right? 
-(IBAction)goToNextPage{
    [self dismissViewControllerAnimated:YES completion:^{

        currentPage++;
        UIViewController *currentPageVC = [self.storyboard instantiateViewControllerWithIdentifier:[NSString stringWithFormat:@"%d", currentPage ]];
        [self presentModalViewController:currentPageVC animated:YES];

        NSLog(@"Current Page is %d", currentPage); 
    }];
}
4

1 に答える 1

0

コントロールが呼び出されると、そのコントローラーの dealloc メソッドに移動します。ARC を使用せず、一部の UI コントロールにメモリを割り当てている場合dismissViewControllerAnimatedは、それらを解放する必要があります。これにより、View Controller のメモリを処理する必要もありません。

于 2012-06-28T16:43:07.483 に答える