作为后续问题的澄清问题:
What exactly must I do in viewDidUnload? When should I release objects in -(void)viewDidUnload rather than in -dealloc?
因此,假设有一个内存不足的错误,视图被隐藏,并且调用了viewDidUnload。我们做释放和零舞蹈。之后不再需要整个视图堆栈,因此调用dealloc。因为我在viewDidUnload中已经有了发行版和零的东西,所以我没有在dealloc中使用它。太完美了。
但是如果没有低内存错误,viewDidUnload就永远不会被调用。dealloc被调用,因为我没有释放和nil的东西,所以有一个内存泄漏。
换句话说,在不先调用viewDidUnload的情况下,dealloc会被调用吗?
实际的后续工作是,如果我在viewDidLoad中分配并设置了一些东西,然后在viewDidUnload中释放它并将其设置为零,我是不是把它留在dealloc之外,还是在dealloc中做一个防御性的nil检查,如果它不是nil,就释放/ nil它?
发布于 2010-05-16 23:55:35
在这两个地方释放它。您不需要检查nil。在nil上释放不会做任何事情。
但是,在viewDidUnload中不要释放在viewDidLoad中不容易重新创建的ivar,以防视图再次加载。
正常情况下(没有内存警告) viewDidUnload不会被调用,只会调用dealloc。
https://stackoverflow.com/questions/2844348
复制相似问题