跟进viewDidUnload与dealloc问题

jen*_*wan 7 iphone memory-management objective-c

澄清问题作为后续行动:

我应该在viewDidUnload中做些什么? 我什么时候应该在 - (void)viewDidUnload而不是-dealloc中释放对象?

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

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

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

实际的后续操作就是,如果我在viewDidLoad中分配和设置一些内容,并在viewDidUnload中将其释放并设置为nil,我是否将其保留为dealloc,或者我是否在dealloc中执行防御性nil检查并释放/没有它,如果它不是零?

pro*_*rmr 8

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

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

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

  • 没有理由在`dealloc`中将ivars设置为`nil`.此外,它反对Apple建议在`dealloc`中使用setter(即`self.ivar = nil`),因为在部分解除分配的对象中使用setter可能会出现问题.使用setter可能不是问题,但为了100%安全,你可以使用``[ivar release]`. (6认同)