是否在viewDidUnload之后调用dealloc?

时间:2010-02-11 19:44:52

标签: objective-c cocoa-touch

一个简单的问题,在viewDidUnload之后,还会调用dealloc吗?关于pickerData的问题,我的理解是在调用dealloc时会释放变量。我的理由是我在一本书中注意到作者在viewDidUnload中将pickerData设置为nil。这是无害的矫枉过正,甚至可能是好的做法,还是没有一种情况下没有另一种就不会被召唤。

INTERFACE:

@interface SingleViewController : UIViewController {
    NSArray *pickerData;
}
@property(nonatomic, retain) NSArray *pickerData;
@end

IMPLMENTATION:

-(void)viewDidUnload {
    [self setSinglePicker:nil];
    [self setPickerData:nil]; 
    [super viewDidUnload];
}

-(void)dealloc {
    NSLog(@"Here");
    [singlePicker release];
    [pickerData release];
    [super dealloc];
}
@end

加里

1 个答案:

答案 0 :(得分:6)

不,在释放UIViewController视图时调用viewDidUnload :. dealloc:仅在UIViewController的引用计数变为零时调用。作者的代码是很好的做法。

作者正在使用合成方法将ivars设置为nil,这意味着那些ivars被发送了释放消息。 viewDidUnload:您应该释放可以轻松重新创建的任何对象或内存。作者基本上是这样说的,“我不再需要引用这些东西,减少保留计数,希望能释放一些内存。如果有必要,我将在viewDidLoad中重新创建它。”

如果调用dealloc,则将ivars设置为nil将不会产生任何后果,因为Objective-C运行时将处理对nil的消息。