是否在viewDidUnload之后调用dealloc?

fuz*_*oat 3 cocoa-touch objective-c

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

接口:

@interface SingleViewController : UIViewController {
    NSArray *pickerData;
}
@property(nonatomic, retain) NSArray *pickerData;
@end
Run Code Online (Sandbox Code Playgroud)

IMPLMENTATION:

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

-(void)dealloc {
    NSLog(@"Here");
    [singlePicker release];
    [pickerData release];
    [super dealloc];
}
@end
Run Code Online (Sandbox Code Playgroud)

加里

Rob*_*nes 6

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

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

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