程序,控制期和view的生命周期

// 如果控制器是窗口的根控制器就可以不用设置尺寸
// self.view = [[UIView alloc] initWithFrame:CGRectZero];
self.view = [[UIView alloc] initWithFrame:CGRectZero];
###一.UIApplication的生命周期
(其实是UIapplication代理的方法)
“`objc
// 应用加载完毕
- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions {

NSLog(@"应用加载完毕");

return YES;

}

// 应用即将成为非活跃状态(即将失去焦点)
- (void)applicationWillResignActive:(UIApplication *)application {

NSLog(@"即将失去焦点");

}

// 应用进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application {
NSLog(@”应用进入后台”);
}

// 应用即将进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application {
NSLog(@”应用即将进入前台”);
}

// 应用成为活跃状态(应用获取焦点)
- (void)applicationDidBecomeActive:(UIApplication *)application {
NSLog(@”应用获取焦点”);
}

// 应用即将结束
- (void)applicationWillTerminate:(UIApplication *)application {
NSLog(@”应用即将结束”);

// 应用内,双击home键结束,会调用此方法
// 应用外,双击home键结束,不会调用此方法

}

// 应用接收到内存警告
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
NSLog(@”应用接收到内存警告”);
}

 ###二.控制器的生命周期(按执行循序排序)
 ```objc
 //初始化对象,初始化数据的(一般很少在这个方法内执行操作)
 - (instancetype)init
 {
   if([super init])
   {
    ...
   }
   return self;
 }
// 系统从xib中加载,重写了loadView,系统不会加载storyboard和xib!!
-(void)loadView
{
    [super loadView];
}
// 视图加载完成
- (void)viewDidLoad {
    [super viewDidLoad];
    NSLog(@"%@,加载完成",[self class]);
}
// 即将显示
-(void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    NSLog(@"%@,即将显示",[self class]);
}
//即将布局view
- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];
    NSLog(@"viewWillLayoutSubviews");
}
//已经布局好view
- (void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    NSLog(@"viewDidLayoutSubviews");
}
// 已经显示
-(void)viewDidAppear:(BOOL)animated
{
/*
系统在载入数据后,将会在屏幕上显示视图,这时候会先调用这个方法.通常我们会利用这个方法对即将显示的视图进一步的
设置,例如:我们可以利用这个方法设置设备不同方向时该如何显示.
另外,当app中有多个视图的时候,在视图切换的时候,并不会再次的调用ViewDidLoad方法,所以如果在调入视图时,
需要对数据做更新,就只能在这个方法内实现了,这个方法非常有用!
*/
    [super viewDidAppear:animated];
    NSLog(@"%@,已经显示",[self class]);
}

// 即将消失
-(void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    NSLog(@"%@,即将消失",[self class]);
}
// 已经消失
-(void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    NSLog(@"%@,已经消失",[self class]);
}
//内存警告
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
//即将销毁view
- (void)viewWillUnload
{
    [super viewWillUnload];
    NSLog(@"viewWillUnload");
}
//已经销毁view

- (void)viewDidUnload
{
/*
这个方法作用:
在内存足够的情况下,软件的视图通常会一直保存在内存中,但是如果内存不够的话,一些没有正在显示的ViewController
将会收到内存不够的警告,然后就会释放自己拥有的视图,已达到释放内存的目的,但是系统只会释放内存,并不会释放对
像的所有权,所以我们需要在这里将不需要在内存中保留的对象释放所有权,也就是讲其指针设置为nil,
这个方法通常并不会在试图变换的时候被调用的,而只会在系统退出或者是收到内存警告的时候才会被调用的,但是由于
我们需要保证收到内存警告的时候能够对其作出响应,所以我们手动自己去实现这个方法
另外,即时设备上按了Home键之后,系统也不一定调用该方法,因为在iOS4之后,系统允许app在后台挂起,并将继续滞留在内存中,因此ViewController并不会调用这个方法释放内存
*/
    [super viewDidUnload];
    NSLog(@"viewDidUnload");
}

// 控制器销毁,这里可以对之前创建的对象进行释放
-(void)dealloc
{
    NSLog(@"%@,销毁",[self class]);
}

 ```
 ###三view的生命周期
 (自定义或者重写继承自UIview的控制的时候调用的)

 ``` //通过代码创建控件的时候的会调用,
//这里的获取frame值 是不准确的
//创建子控件对象添加即可,在layoutSubviews中布局

“`objc
//调用init的方法的时候,init方法内部会自动调用initWithFrame:方法
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [self initWithFrame:frame])
{
}
return self;
}

//通过xib和SB加载的会调用
//在这里获取frame的值也是不准确的
//这里获取不到UIView中子控件(这里还没加载完成)
//创建
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if (self = [super initWithCoder:aDecoder])
{
}
return self;
}
//通过xib\sb加载会调用
//这里获取的frame值还是假的
//创建子控件对象 ,添加即可 - 布局在layoutSubviews
- (void)awakeFromNib
{
}
//在这里可以绘制图层
- (void)drawRect:(CGRect)rect
{

}
//在这里布局子控间的
//第一次加载或者刷新的时候会调用
//子控件发生变化的时候(frame和子控件的个数变化),会调用
- (void)layoutSubviews
{
}
“`

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值