ios 视图控制器的释放 举例说明
时间: 2023-09-28 15:13:11 浏览: 60
iOS 中的视图控制器是非常重要的组件,它们负责管理应用程序的界面,并且需要及时释放以避免内存泄漏。下面以一个简单的例子来说明视图控制器的释放。
假设我们有一个包含两个视图控制器的应用程序,分别是 AViewController 和 BViewController。AViewController 是主界面,BViewController 是从 AViewController 跳转过来的界面。
在 AViewController 中,我们使用如下代码跳转到 BViewController:
```
BViewController *bvc = [[BViewController alloc] initWithNibName:@"BViewController" bundle:nil];
[self.navigationController pushViewController:bvc animated:YES];
```
在 BViewController 中,我们可以通过点击返回按钮来返回到 AViewController。这个过程中,AViewController 会被重新显示出来,但是 BViewController 已经不需要了,需要将其释放。
如果我们使用 ARC,那么只需要在 BViewController 中添加如下代码即可:
```
- (void)dealloc {
NSLog(@"BViewController dealloc");
}
```
当 BViewController 被释放时,会自动调用 dealloc 方法,我们可以在这里添加一些清理工作,例如取消网络请求、移除通知等。
如果我们使用手动内存管理(MRC),那么需要在 AViewController 中添加如下代码:
```
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
if (![self.navigationController.viewControllers containsObject:self]) {
// BViewController 被弹出了,需要释放
[self release];
}
}
```
当 BViewController 被弹出时,会触发 AViewController 的 viewWillDisappear 方法,在这里判断当前视图控制器是否还在导航栈中,如果不在就可以释放了。注意,这里需要调用 release 方法来手动释放内存。
总之,无论是使用 ARC 还是手动内存管理,都需要及时释放不再需要的视图控制器,以避免内存泄漏。