内存管理&viewDidUnload?

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

如果我有一个viewController设置如下:

@interface MapViewController : UIViewController <MKMapViewDelegate, CLLocationManagerDelegate> {
    CLLocationManager *locationManager;
}

-(void)viewDidLoad {
    [super viewDidLoad];
    locationManager = [[CLLocationManager alloc] init];
}
Run Code Online (Sandbox Code Playgroud)

在内存管理方面,我应该向viewDidUnload和dealloc添加发布吗?

-(void)viewDidUnload {
    [locationManager release];
    locationManager = nil;
    [super viewDidUnload];
}


-(void)dealloc {
    [locationManager release];
    [super dealloc];
}
Run Code Online (Sandbox Code Playgroud)

欢呼加里

编辑:

根据Deans的评论,[super dealloc]降到了最低点.

dea*_*rne 6

简短回答:

除非您在viewDidLoad(或xib)中创建/保留它,否则不要在viewDidUnload中释放它.

答案很长:

viewDidUnload用于释放在创建视图时可能做出的任何事情 - 这包括viewDidLoad中的内容,但也包括从xib文件内部创建的IBOutlet属性.这些都应该被释放并在viewDidUnload中设置为nil.

其他任何东西都应该以dealloc发布.

我们的想法是,如果调用viewDidUnload来释放一些内存,则可以从viewDidLoad方法中再次完全重新创建视图.


Mik*_*ler 5

viewDidUnload你应该将你的IBOutlet属性设置为nil和任何初始化的属性viewDidLoad.

请记住,如果手机内存不足,如果屏幕不在屏幕上,您的视图将被卸载.下次再次加载视图时,新视图将连接到IBOutlets,并且将再次调用viewDidLoad.因此,您应将插座属性设置为nil in viewDidUnload以减少内存占用.