Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c viewDidUnload后是否调用dealloc?_Objective C_Cocoa Touch - Fatal编程技术网

Objective c viewDidUnload后是否调用dealloc?

Objective c viewDidUnload后是否调用dealloc?,objective-c,cocoa-touch,Objective C,Cocoa Touch,一个简短的问题,在viewDidUnload之后,dealloc是否也会被调用?我问的是关于pickerData,据我所知,当调用dealloc时,变量将被释放。我提问的原因是,我在一本书中注意到,作者在viewDidUnload中将pickerData设置为零。这是无害的过度杀戮,甚至是良好的做法,还是没有一种情况下,一个不会被称为没有另一个 接口: @interface SingleViewController : UIViewController { NSArray *picker

一个简短的问题,在viewDidUnload之后,dealloc是否也会被调用?我问的是关于pickerData,据我所知,当调用dealloc时,变量将被释放。我提问的原因是,我在一本书中注意到,作者在viewDidUnload中将pickerData设置为零。这是无害的过度杀戮,甚至是良好的做法,还是没有一种情况下,一个不会被称为没有另一个

接口:

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

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

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

gary

否,viewDidUnload:在释放UIViewController的视图时调用。dealloc:仅在UIViewController的引用计数变为零时调用。作者的代码是良好的实践

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


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

当UIViewController引用计数变为零时,即当UIViewController被释放时。我没有意识到这一点,很高兴知道和很好的理由都有[self-setPickerData:nil];&[pickerData发布];