当收到内存警告时,如果viewcontroller未显示(在后台),会执行didReceiveMemoryWarning -> viewDidUnLoad;如果viewcontroller当前正在显示( 当重新显示该viewController时,执行过viewDidUnLoad的viewcontroller(即原来在后台)会重新调用loadview -> viewDidLoad。 在iOS 3.0以及更高版本中,你应该重载viewDidUnload函数来释放任何对view的引用或者它里面的内容(子view等等)。 这个网上的资料都说的很不全面,尤其是蓝色字部分。 三、viewDidUnload 这个函数是viewDidLoad的对立函数。在程序内存欠缺时,这个函数被controller调用()。 四、结论 所以流程应该是这样: (loadView/nib文件)来加载view到内存 ——>viewDidLoad函数进一步初始化这些view ——>内存不足时,调用viewDidUnload函数释放
à view did load Unload View Process: Memory warning à iOS informs vc à didReceive Memory Warning à viewDidUnload 当重载load方法,如init,loadView,viewDidLoad等等,super方法要先调用;然而,如果重载clean方法,如didReceiveMemorywarning ,viewDidUnload 在viewDidUnload中,仅仅clean所有views。其它对象应该在didReceiveMemoryWarning里进行清除。
视图将被从屏幕上移除之前执行 2、viewDidDisappear视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放 关于viewDidUnload :在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话,viewDidUnload将会被执行,本视图的所有子视图将被销毁,以释放内存, 此时开发者需要手动对viewLoad、viewDidLoad 通常上述方法包括如下几种,这些方法都是UIViewController类的方法: - (void)viewDidLoad; - (void)viewDidUnload; - (void)viewWillAppear 2) - (void)viewDidUnload; 在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够,一些没有正在显示的viewcontroller就会收到内存不够的警告,然后就会释放自己拥有的视图 上述方法的流程图可以简单用如下表示: 运行APP —> 载入视图 —> 调用viewDidLoad方法 —> 调用viewWillAppear方法 —> 调用viewDidAppear方法 —> 正常运行 释放对象所有权 <— 调用viewDidUnload
3》假设UIViewController释放掉了它的view,它会调用viewDidUnload。 能够重载这种方法来进行额外的清理工作。 视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc 视图被销毁,此处须要对你在init和viewDidLoad中创建的对象进行释放 关于viewDidUnload viewDidUnload将会被运行,本视图的全部子视图将被销毁,以释放内存,此时开发人员须要手动对viewLoad、viewDidLoad中创建的对象释放内存。
sendField release]; [msgView release]; [ipField release]; [super dealloc]; } - (void)viewDidUnload { [self setIpField:nil]; [super viewDidUnload]; } @end
MKCoordinateRegion region={center,span}; //set map center location [self.mymapkit setRegion:region]; } – (void)viewDidUnload { [self setMymapkit:nil]; [super viewDidUnload]; // Release any retained subviews of the
didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use. } - (void)viewDidUnload
1,1)];//删除最后一个字符 self.label.text=[NSString stringWithString:_string];//显示结果 } } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation
(iOS3.0以后不建议重载这个函数来进行额外的清除操作,使用viewDidUnload). b) 默认实现会在确定可以安全地释放view时释放掉view。 如果controller释放了它的view, 它会调用 viewDidUnload.可以重载这个函数来进行额外的清理操作(不要清除view和那些加载循环中无法rebuild的数据)。 didReceiveMemoryWarning到底应该怎么用 当程序接到内存警告时View Controller将会收到这个消息:didReceiveMemoryWarning从iOS3.0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload 如果view可以被释放,那么这个函数释放view并调用viewDidUnload。你可以重载这个函数来释放controller中使用的其他内存。 而在iOS3.0或更高版本中,你应该在viewDidUnload中释放这些引用。
. - (void)viewDidUnload { [super viewDidUnload]; // Make the view's context current GLKView
上完全移除) 当有内存警告时 didReceiveMemoryWarning(当收到内存警告) viewWillUnload(view即将销毁的时候) 销毁view,首先不在视野中得view viewDidUnload
其它部分代码 - (IBAction) textFieldDoneEditing: (id)sender { [sender resignFirstResponder]; } - (void) viewDidUnload self setStudentId: nil]; [self setStudentName: nil]; [self setStudentClass: nil]; [super viewDidUnload
d) 将view属性置为nil e) Vc调用了viewDidUnload方法去通知子类views已经remove了。
方法之后调用viewDidLayout: ComposeView的UI组件树已经测量完毕,可以在此方法执行一些依赖组件大小的操作,例如开始启动动画viewWillUnload: ComposeView即将被移除viewDidUnload
清理函数 didReceiveMemoryWarning, viewDidUnload 和 dealloc 都是在方法结尾处调用 supper 的方法。
ViewWillDisAppear 视图即将消失 8、ViewDidDisAppear 视图已经消失 9、ViewWillUnload(已废弃) 当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用; 10、ViewDidUnload
viewDidUnload在视图被卸载时候调用,可以在此删除OpenGL ES缓存。
NSLog(@"%s",__func__); } // 方法已过期,即将销毁view - (void)viewWillUnload { } // 方法已过期,已经销毁view - (void)viewDidUnload
ViewController 的 loadView,、viewDidLoad,、viewDidUnload 分别是在什么时候调用的? 此方法在编程实现view时调用,view控制器默认会注册memory warning notification,当view controller的任何view没有用的时候,viewDidUnload会被调用
ViewController 的 loadView,、viewDidLoad,、viewDidUnload 分别是在什么时候调用的? 此方法在编程实现view时调用,view控制器默认会注册memory warning notification,当view controller的任何view没有用的时候,viewDidUnload会被调用 viewWillDisappear:]; -[ViewController viewDidDisappear:]; -[ViewController viewWillUnload:]; -[ViewController viewDidUnload