2

InitViewControllerとSettingsViewControllerの2つのコントローラーがあります。各ビューには、別のビューを呼び出すボタンがあります。

InitViewController

@interface InitViewController : UIViewController
    - (IBAction)loadSettings:(id)sender;
@end

@implementation InitViewController
    - (IBAction)loadSettings:(id)sender {
        SettingsViewController *vc = [[SettingsViewController alloc] initWithNibName:@"SettingsViewController" bundle:nil];
        [self presentViewController:vc animated:YES completion:nil];
        vc = nil;
    }
@end

SettingsViewController

@interface SettingsViewController : UIViewController
    - (IBAction)back:(id)sender;
@end

@implementation SettingsViewController
    - (IBAction)back:(id)sender {
        InitViewController *vc = [[InitViewController alloc] initWithNibName:@"InitViewController" bundle:nil];
        [self presentViewController:vc animated:YES completion:nil];
        vc = nil;
    }
@end

アプリケーションをプロファイリングし、ボタンを何度もタップしてテストしているときに、InitViewControllerとSettingsViewControllerのインスタンスがまだ生きていることを確認しました=>PrintScreen

私は何が間違っているのですか?

4

1 に答える 1

5

あなたはそれを作ったSettingsViewController元には戻りません。InitViewController代わりに、の新しいインスタンスを作成し、それをInitViewController提示します。InitViewControllerそのため、とのインスタンスが交互に表示されるビュー コントローラーのスタックができあがりますSettingsViewController

どちらのタイプのビュー コントローラーも、提示した後に閉じることはないため、割り当てを解除することはできません。

アクション-[SettingsViewController back:]は、新しい を作成して提示するのではなく、それ自体を終了する必要がありInitViewControllerます。

@implementation SettingsViewController

- (IBAction)back:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}
于 2012-11-21T19:42:28.987 に答える