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