OStack程序员社区-中国程序员成长平台

标题: ios - 需要有关 UIViewController 的帮助 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 02:32
标题: ios - 需要有关 UIViewController 的帮助

在多个 UIViewController 一起工作的应用程序中,

firstViewController 添加到根目录。到这里为止很好,现在我想转到 secondViewController 我不想使用 UINavigationControllerUITabBarController。我已经阅读了View Controller Programming Guide但它没有使用 UINavigationController、UITabBarController 和 Storyboard 来指定。

当用户想要从 secondViewController 移动到 firstViewController 时,secondViewController 将如何被销毁?

Apple Doc 也没有指定 UIViewController 是如何释放或销毁的?它只告诉UIViewController里面的生命周期。



Best Answer-推荐答案


如果您担心 UIViewController 是如何被释放或销毁的,那么这里有一个适合您的场景:-

这是一个 FirstViewController 中的按钮点击方法,它呈现 SecondViewController(使用 pushViewController、presentModalViewController 等)

在 FirstViewController.m 文件中

- (IBAction)btnTapped {

    SecondViewController * secondView = [[SecondViewController alloc]initWithNibName"SecondViewController" bundle:nil];
    NSLog(@"Before Present Retain Count:%d",[secondView retainCount]);
    [self presentModalViewController:secondView animated:YES];
    NSLog(@"After Present Retain Count:%d",[secondView retainCount]);
    [secondView release];  //not releasing here is memory leak(Use build and analyze)
}

现在在 SecondViewController.m 文件中

- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"View Load Retain Count %d",[self retainCount]);
  }

- (void)dealloc {
    [super dealloc];
    NSLog(@"View Dealloc Retain Count %d",[self retainCount]);
 }

运行代码后:

Before Push Retain Count:1
View Load Retain Count 3
After Push Retain Count:4
View Dealloc Retain Count 1

如果你正在分配和初始化一个 ViewController,你是它生命周期的所有者,你必须在 push 或 modalPresent 之后释放它。 在上面的输出中,在 alloc init 时 SecondViewController 的保留计数为一,,,, 令人惊讶的是,但逻辑上它的保留计数即使在被释放后仍为一(请参阅 dealloc 方法),因此需要一个在 FirstViewController 中释放以完全销毁它。

关于ios - 需要有关 UIViewController 的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16333731/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4