为什么在调用popViewControllerAnimated时ARC不释放内存
我的项目使用ARC
,当我必须显示与导航控制器的视图我这样做:
ShareViewController_iPhone *share = [[ShareViewController_iPhone alloc] initWithNibName:@"ShareViewController_iPhone" bundle:nil]; [self.navigationController pushViewController:share animated:YES];
我可以看到在Xcode内存增加了一定的价值,然后当我解雇的观点,我这样做:
[self.navigationController popViewControllerAnimated:YES];
但是当视图closures时,内存不会减less,我该怎么做呢?
当你popup视图控制器,它被标记为释放(即引用计数为0,除非另一个对象引用)。 但不立即释放。 我已经看到的取消分配大多是随机的!
此处的视图控制器必须由导航控制器本身保留一段时间以创buildanimation。 参考计数下降到零后,重新分配确实发生。 试着在没有animation的情况下popup视图控制器(例如: animated:NO
),并自己看看是否立即释放。
ARC会自行清理内存(它将收集所有引用计数设置为“0”的对象意味着准备释放的对象),我们不能控制这个。 它由操作系统pipe理。
所以当你popup一个视图控制器时,它不会立即从内存中释放它。 取决于其他内存使用情况/内存可用性,可能需要一些时间。
还有一种情况,你需要检查每次推动内存分配是否增加了一定的值,那么你的代码肯定会出错。
当你popup一个ViewController,它不释放,这意味着你的控制器有一个参考周期。 你必须检查委托,如果有,块,弱,强参考。
- 你的委托必须是弱引用。
- 如果使用阻止。 自我必须弱引用:__weak id weakSekf = self;
希望这些信息将帮助你。 🙂