问题描述
|
在谈论插座时,在Apple的文档中。
它说
在您的自定义视图控制器类中
您可以实现viewDidUnload到
调用您的访问器方法进行设置
网点为零。
我能理解这一点,因为在这种情况下,调用accessor方法来设置nil会释放该对象,并将指针设置为nil可以防止访问无效点,这可能导致崩溃。
但是之后,它说:
注意:在iOS 3.0之前的版本中,
viewDidUnload方法不可用。
相反,您应该将网点设置为零
在setView:中,如下所示
例:
- (void)setView:(UIView *)aView {
if (!aView) { // View is being set to nil.
// Set outlets to nil,e.g.
self.anOutlet = nil;
}
// Invoke super\'s implementation last.
[super setView:aView];
}
另外,由于细节
在dealloc的实现
UIViewController,您还应该设置
出口变量在dealloc中为nil:
- (void)dealloc {
// Release outlets and set outlet variables to nil.
[anOutlet release],anOutlet = nil;
[super dealloc];
}
1)为什么即使在dealloc中,我们也需要设置nil? (我认为dealloc是对象生命周期的最后一步,没有其他人可以通过该对象访问出口。)
2)我们是否仍需要在iOS 3.0或更高版本中设置nil?(我发现自动生成的代码Xcode不会将nil设置为出口变量,而只释放它们。)
解决方法
是的,您无需在
dealloc
中将网点设置为零。只要确保释放它们即可。