1

受け取ったメモリ警告を回避するために、navigationViewControllerにあるmainViewControllerのビューを解放する必要があります。

ビューをロードする良い方法は「loadview」メソッドですが、「self.view = nil」を実行してビューのロックを解除しようとすると(スタックの次のコントローラーに移動するとき)、「loadview」メソッドが再度呼び出されます。したがって、何も起こりません。

'viewWillAppear'メソッドでビューをロードするこの問題を解決しましたが、私の質問は次のとおりです。

その手順は正しいですか?そうでない場合(それが私が思うことです)、どうすればそのビューを解放してメモリを解放できますか?

それを行うための最良の(またはより正しい)方法はどれですか?

これはコードです:

ビューをロードせずに「loadView」

- (void)loadView
{
    [super loadView];
    (some more code)
}

ここに読み込まれるビュー

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];

    if (!pral)
    {
        pral = [[TouchDrawView alloc] initWithFrame:[UIScreen mainScreen].bounds];
           [self setView:pral];
           [pral release];
    }
        (some more code)
}

これは、スタックの次のviewControllerへの呼び出しです

- (void)menus:(id)sender
{
    opcions *ops = [[opcions alloc] init];
    [[self navigationController] pushViewController:ops animated:YES];
    [ops release];

//Here I'm trying to free memory releasing the view
    [pral removeFromSuperview];
    pral = nil;
    self.view = nil;
}

ありがとう

4

2 に答える 2

0

ビューは自動的にアンロードされるため、ビューをアンロードする必要はありません。ViewdidUnloadメソッドのメモリを含むオブジェクトを解放する必要があります。

于 2012-04-14T16:40:32.923 に答える
0

カスタムサブビューを構築するためのより良いフックはviewDidLoadです。

少なくとも、didReceiveMemoryWarningおよびdeallocで保持されているサブビュー(ARC以前)を解放する必要があります。

新しいviewControllerにプッシュするときに解放する必要はありません。あなたの古いものはまだそこにあります。

于 2012-04-14T16:41:11.690 に答える