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