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]降到了最低点.
简短回答:
除非您在viewDidLoad(或xib)中创建/保留它,否则不要在viewDidUnload中释放它.
答案很长:
viewDidUnload用于释放在创建视图时可能做出的任何事情 - 这包括viewDidLoad中的内容,但也包括从xib文件内部创建的IBOutlet属性.这些都应该被释放并在viewDidUnload中设置为nil.
其他任何东西都应该以dealloc发布.
我们的想法是,如果调用viewDidUnload来释放一些内存,则可以从viewDidLoad方法中再次完全重新创建视图.
在viewDidUnload
你应该将你的IBOutlet属性设置为nil和任何初始化的属性viewDidLoad
.
请记住,如果手机内存不足,如果屏幕不在屏幕上,您的视图将被卸载.下次再次加载视图时,新视图将连接到IBOutlets,并且将再次调用viewDidLoad.因此,您应将插座属性设置为nil in viewDidUnload
以减少内存占用.
归档时间: |
|
查看次数: |
1366 次 |
最近记录: |