• 控制器对视图声明周期的控制


    init-初始化程序

    viewDidLoad-加载视图

    viewWillAppear-UIViewController对象的视图即将加入窗口时调用;

    viewDidApper-UIViewController对象的视图已经加入到窗口时调用;

    viewWillDisappear-UIViewController对象的视图即将消失、被覆盖或是隐藏时调用;

    viewDidDisappear-UIViewController对象的视图已经消失、被覆盖或是隐藏时调用;

    viewVillUnload-当内存过低时,需要释放一些不需要使用的视图时,即将释放时调用;

    viewDidUnload-当内存过低,释放一些不需要的视图时调用。

    比如如下代码:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
    {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self)
    { // Custom initialization

    UITabBarItem *tbi = [self tabBarItem];
    [tbi setTitle:@"CurrentTime"];
    [[self view ] setBackgroundColor:[UIColor yellowColor]];

    }
    return self;
    }

    我们将UIViewController的init方法中访问的实例变量view在init中将背景设置为黄.色,运行程序,我们能发现背景的确变成了黄.色,但是,在我们还没有需要使用视图的时候,该视图已经加载好了,在UIViewController的初始方法中访问实例变量view,会导致延迟载入机制失效,这个问题看上去不是很严重,但是如果考虑到内存过低警告,那么问题就大了。。。

      

    运行程序,选择模拟器中的硬件->模拟内存过低警告,我们会发现,原本设置的黄.色背景不见了,这是因为,内存过低,视图控制对象会在发出内存过低警告时收到didReceiveMemoryWarning消息,该方法默认实现,检查视图控制对象的视图是否可见,如果不可见,则释放掉,下次在加载该视图时就不会执行init方法,而是只执行viewDidLoad方法,所以需要将[[selfview ] setBackgroundColor:[UIColoryellowColor]];放到viewDidLoad中,这样如果视图因为内存过低被释放掉了,下次需要使用到该视图的时候,程序会默认取执行该视图的viewDidLoad方法,这样背景颜色就又出来了。

  • 相关阅读:
    对easyui-validatebox的验证类型的扩展,值必须在某个区间
    从零开始学springboot笔记(六)-Spring boot之Spring Boot Spring Data JPA介绍
    从零开始学springboot笔记(五)-Spring boot之Spring Data- JPA 笔记
    从零开始学springboot笔记(四)-Spring boot之热部署之Springbootdevtools(工作中使用)
    JQuery给指定的表格的输入框或其他组件赋值
    oracle开发技巧
    数据库开发要求
    user_tab_columns和user_tab_cols的区别
    windows xp显示文件的后缀
    vue学习遇到的问题
  • 原文地址:https://www.cnblogs.com/rankilau/p/4192227.html
Copyright © 2020-2023  润新知