我和一位同事一直在设计代码,以便在控制器对象的viewDidLoad方法内分配视图控制器对象。我们做了很多工作,对象图似乎很好。一段时间后,我们发现需要在当前视图控制器层次结构之上添加另一层,以拥有,分配和释放我们先前的父视图控制器。

这让我想到了内存不足警告,并且视图确实加载了。以前,我们的视图始终可见,因此如果发生内存不足警告,则不会被释放,但是现在有发生这种情况的机会。如果确实如此,则似乎在重新加载视图时,它们将为新的视图控制器分配新的内存。

这会导致广泛的内存泄漏吗?还是由于旧的控制器将自动释放,我们使用保留的声明属性的事实会为我们节省吗?我应该考虑哪些样式或约定?谢谢您的帮助!

最佳答案

如果确实在viewDidLoad中创建视图控制器,则应在viewDidUnload中释放它们。适用于几乎所有对象,而不仅仅是视图控制器。

但是,如果您说“Wut !?”,我不会感到惊讶。如果您的视图控制器需要通过内存警告来保持其状态,那么您就不想释放它们。但是,如果用具有新状态的新替代它们将不会更好。

在viewDidLoad中创建视图控制器可能没有任何意义。在initWithNibName:bundle:中创建它们(并在dealloc中释放它们)。设计模式是视图控制器始终存在,它们的视图可以来去去。如果您的下级视图控制器有任何占用大量内存的内容,请在其viewDidUnload中仅释放该对象。然后在出现内存警告时,您仍将释放大量内存,但是所有视图控制器将保持低内存使用状态,仅保留一些标志,索引列表等,它们将需要根据要求恢复其观点。

关于ios - 在viewDidLoad中分配UIViewControllers。这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7744670/

10-11 04:34