ios - 查看 Controller 未被释放

标签 ios view

我有 2 个 Controller InitViewController 和 SettingsViewController。每个 View 都有一个调用另一个 View 的按钮:

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

我做错了什么?

最佳答案

您的SettingsViewController不会返回到创建它的InitViewController。相反,它创建一个 InitViewController实例并呈现它。因此,您最终会得到一堆在 InitViewControllerSettingsViewController 实例之间交替的 View Controller 。

由于您在呈现任何类型的 View Controller 后都不会关闭它,因此它们都不能被释放。

您的 -[SettingsViewController back:] 操作应该自行关闭,而不是创建并呈现新的 InitViewController

@implementation SettingsViewController

- (IBAction)back:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
}

关于ios - 查看 Controller 未被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13500702/

相关文章:

ios - 如何在应用程序未启动时调试推送通知?

即使 UIPickerViewDataSource 未绑定(bind),iOS UIPickerView 也会调用 numberOfRowsInComponent

ios - 设置特定 View Controller 的状态栏颜色 - Swift

ios - Xcode 8 似乎错误地使用 Swift 3 更改了嵌入式框架函数签名

Drupal 标记用户关注/关注的 View

ios - MPMediaItem 的唯一 ID 而不是 persistentID

python - 如何根据决策( boolean )字段在现有表单的 View 中设置默认值?

Django:登录用户并在同一页面上刷新而不定义模板?

Android:为什么 Checkbox 不显示未选中状态的空复选框?

Android Studio 更改一个 xml 文件中的 ID 会更改另一个文件中的 ID