为什么在调用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;

希望这些信息将帮助你。 🙂