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

来源:互联网 发布:seo专员做什么的 编辑:程序博客网 时间:2024/06/05 15:37

// 如果控制器是窗口的根控制器就可以不用设置尺寸
// 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