跟进viewDidUnload与dealloc问题

时间:2010-05-16 15:48:49

标签: iphone objective-c memory-management

澄清问题作为后续行动:

What exactly must I do in viewDidUnload? When should I release objects in -(void)viewDidUnload rather than in -dealloc?

所以假设存在内存错误,视图被隐藏,并且调用了viewDidUnload。我们做发布和零舞蹈。之后不需要整个视图堆栈,因此调用dealloc。因为我已经在viewDidUnload中有release和nil的东西,所以我没有在dealloc中使用它。完美。

但如果没有低内存错误,则永远不会调用viewDidUnload。 dealloc被调用,因为我没有release和nil的东西,所以有内存泄漏。

换句话说,如果没有首先调用viewDidUnload,是否会调用dealloc?

实际的后续操作就是,如果我在viewDidLoad中分配并设置了一些东西,然后我将它释放并在viewDidUnload中设置为nil,我是否将它从dealloc中删除,或者我是否在dealloc中进行防御性nil检查并且如果它不是零,则释放/为零?

1 个答案:

答案 0 :(得分:8)

在两者中释放它。你不需要检查零。发布零没有任何作用。

但是,在viewDidUnload中,如果视图再次加载,则不会释放在viewDidLoad中无法轻松重新创建的ivars。

通常(没有内存警告)viewDidUnload不会被调用,只调用dealloc。