2010-02-11 69 views
3

一个简单的问题,在viewDidUnload之后dealloc是否也被调用?我问关于pickerData,这是我的理解,当dealloc被调用时,变量将被释放。我询问的原因是我在一本书中注意到作者在viewDidUnload中将pickerData设置为nil。这是无害的矫枉过正,甚至可能是好的做法,或者是没有任何情况下没有其他人不会被召唤的情况。dealloc在viewDidUnload之后被调用吗?

接口:

@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 

加里

回答

6

没有,viewDidUnload:一个UIViewController的观点被释放时被调用。只有在UIViewController的引用计数为零时才会调用dealloc:。作者的代码是很好的做法。

作者正在使用合成方法将ivars设置为零,这意味着这些ivars会发送释放消息。 viewDidUnload:你应该在哪里发布任何对象或内存,你可以很容易地重新创建。作者基本上是这样说的:“我不再需要引用这些东西了,减少了保留数,希望这会释放一些内存。如果需要的话,稍后我会在viewDidLoad中重新创建它。”

如果由于Objective-C运行时处理由nil构成的消息而调用dealloc,将ivars设置为零将不会产生任何后果。

+0

当UIViewControllers引用计数变为零时,即释放UIViewController时。我没有意识到这一点,很好的理解和一个​​很好的理由都有[self setPickerData:nil]; &[pickerData发布]; – fuzzygoat 2010-02-11 20:04:15

+0

感谢编辑Rob的额外信息,非常感谢。 – fuzzygoat 2010-02-11 21:06:43

相关问题