IOS之【ios程序的生命周期】

来源:互联网 发布:yap—yum的体位 编辑:程序博客网 时间:2024/05/21 17:59

OneAppDelegate.m文件


#import “OneAppDelegate.h"

#import “OneViewController.h"

@implementation OneAppDelegate


- (void)dealloc

{

    [_windowrelease];

    [_viewControllerrelease];

    [superdealloc];

}


#pragma mark 在应用程序启动完毕的时候调用

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    //在这里隐藏状态栏,会让程序全屏显示

    // application.statusBarHidden = YES;

    

    // 初始化一个窗口

    self.window = [[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];

    

    //初始化一个控制器

    // OneViewController.xib

    // bundle:可以理解为是文件夹,传入nil代表着项目文件夹

    // 如果nibNamenil,默认会去加载与控制器同名的xib文件

    // self.viewController = [[[OneViewController alloc] initWithNibName:@“OneViewController123" bundle:nil] autorelease];

    

    //调用init方法创建控制器的时候,它会默认加载与控制器同名的xib文件

    //如果找不到对应的xib文件,就会默认创建一个空的UIView,默认背景颜色是黑色

    //实际上,创建好控制器之后,并不会去马上初始化内部的view

    //因为控制器内部的view是延迟加载的,用到时再加载

    self.viewController = [[[OneViewControlleralloc]init] autorelease];

    

    //只要你访问了控制器的view,才会开始创建它内部的view

    //所以下面这句代码会导致初始化控制器的view,而且创建完毕后会调用控制器的viewDidLoad方法

    //UIView *view =  self.viewController.view;

    

    //设置窗口的根控制器

    self.window.rootViewController =self.viewController;

    //最好设置窗口的根控制器,不要直接添加控制器的view到窗口中

    //因为控制器还要接收一些窗口传递过来的系统事件,比如屏幕旋转

    // [self.window addSubview:self.viewController.view];

    

    // window显示出来,并且成为主窗口

    // 窗口显示出来后就会将根控制器的ViewUIWindow

    [self.windowmakeKeyAndVisible];

    return YES;

}




OneViewController.m文件


#import “OneViewController.h"


@interface OneViewController ()


@end


@implementation OneViewController


- (void)click {

    UIApplication *app = [UIApplicationsharedApplication];

    //设置应用程序图标上的红色数字

    app.applicationIconBadgeNumber =5;

    

    // 隐藏状态栏

    // app.statusBarHidden = YES;

    

    // 显示联网状态

    //如果已经显示,就隐藏;如果已经隐藏,就显示

    //这里只是显示一个状态而已,并没有表示我们的程序真的在联网

    app.networkActivityIndicatorVisible = !app.isNetworkActivityIndicatorVisible;

}


#pragma mark 这个方法是用来加载内部的view

// 父类的loadView内部是这样实现的:如果有跟控制器相关联的xib文件,就会通过xib文件创建内部的view,如果没有,就会创建一个空白的view(默认背景颜色是黑色)

// 苹果设计这个方法的目的就是给我们自定义控制器内部的view

// 如果我们需要自定义控制器的view,就不需要调用父类的loadView方法

- (void)loadView {

    // [super loadView];

    

    // iPhone坐标系是320 x 480(点坐标系)

    

    // 获取屏幕的尺寸

    CGRect bounds = [UIScreenmainScreen].bounds;

    // 屏幕的宽度

   CGFloat width = bounds.size.width;

    // 屏幕的高度

   CGFloat height = bounds.size.height;

    // CGRect frame = CGRectMake(0, 20, width, height - 20);

    

    // applicationFrame就是控制器内部view默认的frame

    // {x=0, y=20, width=320, height=460}

    CGRect frame = [UIScreenmainScreen].applicationFrame;

    NSLog(@"%@",NSStringFromCGRect(frame));

    

    // 通过代码初始化我们的view

    self.view = [[[UIViewalloc]initWithFrame:frame]autorelease];

    

    // 设置view的背景颜色为红色

    self.view.backgroundColor = [UIColorredColor];

}


#pragma mark 当内部的view加载完毕之后就会调用

// 一般会在这里添加一些子视图、渲染数据

// 无论是通过xib还是代码创建view,总之view创建完毕后就会调用这个方法

- (void)viewDidLoad

{

    [superviewDidLoad];

    

NSLog(@"viewDidLoadview被加载完毕");

}


#pragma mark 当内部的view因为内存警告而被系统自动回收的时候调用

- (void)viewDidUnload {

    [superviewDidUnload];

}


#pragma mark 当内部的view被添加到视图层次结构(也就是被添加到窗口中时)中就会调用

// 如果是重写生命周期方法,一定要调用回父类的方法

- (void)viewDidAppear:(BOOL)animated {

    [superviewDidAppear:animated];

    NSLog(@"viewDidAppear,控制器的view被添加到屏幕");

}


#pragma mark 当内部的view从视图层次结构(也就是从窗口中移除时)中移除就会调用

- (void)viewDidDisappear:(BOOL)animated {

    [superviewDidDisappear:animated];

}


#pragma mark 当内部的view即将被添加到屏幕的时候调用

- (void)viewWillAppear:(BOOL)animated {

    [superviewWillAppear:animated];

    NSLog(@"viewWillAppear,view即将被添加到窗口中");

}


#pragma mark 当内部的view即将从屏幕中移除的时候调用

- (void)viewWillDisappear:(BOOL)animated {

    [superviewWillDisappear:animated];

}


#pragma mark 接收到内存警告

- (void)didReceiveMemoryWarning

{

    [superdidReceiveMemoryWarning];

    //一般会在这里回收内存

}


@end