一个简单的问题,在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
加里
答案 0 :(得分:6)
不,在释放UIViewController视图时调用viewDidUnload :. dealloc:仅在UIViewController的引用计数变为零时调用。作者的代码是很好的做法。
作者正在使用合成方法将ivars设置为nil,这意味着那些ivars被发送了释放消息。 viewDidUnload:您应该释放可以轻松重新创建的任何对象或内存。作者基本上是这样说的,“我不再需要引用这些东西,减少保留计数,希望能释放一些内存。如果有必要,我将在viewDidLoad中重新创建它。”
如果调用dealloc,则将ivars设置为nil将不会产生任何后果,因为Objective-C运行时将处理对nil的消息。