在多个 UIViewController 一起工作的应用程序中,
firstViewController
添加到根目录。到这里为止很好,现在我想转到 secondViewController
我不想使用 UINavigationController
或 UITabBarController
。我已经阅读了View Controller Programming Guide但它没有使用 UINavigationController、UITabBarController 和 Storyboard
来指定。
当用户想要从 secondViewController
移动到 firstViewController
时,secondViewController
将如何被销毁?
Apple Doc 也没有指定 UIViewController 是如何释放或销毁的?它只告诉UIViewController
里面的生命周期。
如果您担心 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 |