对于一个iOS app来讲,生命周期是一个十分至关重要的东西。对于一个app来讲控制着app的开启、睡眠、关闭等状态;对于一个页面的来讲,控制页面的加载、显示、消失;对于一个View或者一个普通的类来讲,控制着初始化、绘制、释放。

一、AppDelegate

当你创建一个iOS项目时,在appDelegate中你会看到如下六个方法,他们分别控制着不同的app生命周期

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

当app完成加载时,此方法会被调用。此方法在app启动时只会执行一次。一般app的根窗口会在此方法中创建。调用后app处于激活状态。launchOptions中包含很多用户信息,可以通过如UIApplicationLaunchOptionsRemoteNotificationKey等Key来获取相关的用户信息

示例(非storyboard/xib方式):

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

{

    NSDictionary* userInfo = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];        

    self.viewController = [[ViewController alloc] init];

    self.window.rootViewController = self.viewController;

    [self.window makeKeyAndVisible];

    return YES;

}

-(void)applicationWillResignActive:(UIApplication *)application;

当app正在使用时,遇到来电、锁屏、回到home页、跳转到其他app并且app挂起不在后台运行的时候,此方法会被调用。调用后app处于挂起状态。此方法调用于applicationDidEnterBackground之前。

-(void)applicationDidEnterBackground:(UIApplication *)application;

当app正在使用时,遇到来电、锁屏、回到home页、跳转到其他app并且app需要后台运行的时候(苹果允许local,music,voip,notifaction在后台中运行),此方法会被调用。调用后app处于后台运行状态。

-(void)applicationWillEnterForeground:(UIApplication *)application;

当app从后台运行状态切换到前台运行时,此方法会被调用。调用后app处于未激活状态。此方法调用于applicationDidBecomeActive之前。

-(void)applicationDidBecomeActive:(UIApplication *)application;

当app被重新激活时,此方法会被调用。此方法应用在app之前已经被打开,但是不处于激活状态,而在此跳转到激活状态的情况。每次跳转到app中,此方法都会被调用。调用后app处于激活状态。

-(void)applicationWillTerminate:(UIApplication *)application;

当手机关机或者双击home键,将app向上拖动致使完全退出时,此方法会被调用。此方法执行之后app的进程会被杀死。

二、UIViewController

对于一个页面来讲,你有8个生命周期可以控制

-(void)awakeFromNib;

但使用storyboard或者xib时,在读取上面的布局之前,此方法会被调用。此方法早于其他方法调用,晚于初始化。在一个页面中,此方法只会被调用一次。

-(void)viewDidLoad;

读取storyboard或者xib的布局之后此方法会被调用。此方法晚于awakeFromNib调用,早于其他方法。在一个页面中,此方法只会被调用一次。多用于初始化页面布局与全局布局相关变量。

-(void)viewWillAppear:(BOOL)animated;

当页面即将出现时,此方法会被调用。当页面之间跳转有动画时,此方法在动画开始时被调用。

-(void)viewDidAppear:(BOOL)animated;

当页面已经完全出现时,此方法会被调用。当页面之间跳转有动画时,此方法会在动画结束时被调用。

-(void)viewWillDisappear:(BOOL)animated;

当页面即将消失时,此方法被调用。当页面之间跳转有动画时,此方法在动画开始时被调用。

-(void)viewDidDisappear:(BOOL)animated;

当页面已经完全消失时,此方法会被调用。当页面之间跳转有动画时,此方法会在动画结束时被调用。

-(void)viewWillLayoutSubviews;

当页面布局即将发生全部变动时(多用于横屏视屏翻转),此方法会被调用,此方法在翻转动画开始时被调用。

-(void)viewDidLayoutSubViews;

当页面布局变动结束时(多用于横屏视屏翻转),此方法会被调用,此方法在翻转动画结束时被调用。

三、View & NSObject

-(void)layoutSubviews;

当View中调用addSubView、view的Frame被重新设置、滚动一个UIScrollView、旋转屏幕时,此方法会被调用。改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件。

-(void)drawRect:(CGRect)rect;

重绘一个View时,此方法会被调用。

-(void)dealloc;

一个View或者NSObject被释放时,此方法会被调用。NSNotification等可能会造成野指针、也通知的变量需要在此手动释放。

iOS中的生命周期的更多相关文章

  1. iOS中View生命周期与布局

    生命周期 说到view的生命周期一般都是指视图控制器的view生命周期. view的创建:loadView 视图控制器(UIViewController)及其子类,无论是手写代码还是storyboar ...

  2. [转] IOS中AppDelegate中的生命周期事件的调用条件

    IOS中AppDelegate中的生命周期事件的调用条件 //当应用程序将要进入非活动状态执行,在此期间,应用程序不接受消息或事件,比如来电 - (void)applicationWillResign ...

  3. (转)iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    原文:http://blog.csdn.net/totogo2010/article/details/8048652 iOS应用程序生命周期(前后台切换,应用的各种状态)详解         分类:  ...

  4. iOS对UIViewController生命周期和属性方法的解析

    目录[-] iOS对UIViewController生命周期和属性方法的解析 一.引言 二.UIViewController的生命周期 三.从storyBoard加载UIViewController实 ...

  5. 《React Native 精解与实战》书籍连载「React Native 中的生命周期」

    此文是我的出版书籍<React Native 精解与实战>连载分享,此书由机械工业出版社出版,书中详解了 React Native 框架底层原理.React Native 组件布局.组件与 ...

  6. 转:iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    iOS应用程序生命周期(前后台切换,应用的各种状态)详解 分类: iOS开发进阶2012-10-08 15:35 42691人阅读 评论(30) 收藏 举报 iosapplication任务anima ...

  7. 【iOS开发】iOS对UIViewController生命周期和属性方法的解析

    iOS对UIViewController生命周期和属性方法的解析 一.引言 作为MVC设计模式中的C,Controller一直扮演着项目开发中最重要的角色,它是视图和数据的桥梁,通过它的管理,将数据有 ...

  8. 12、Cocos2dx 3.0游戏开发找小三之3.0中的生命周期分析

    重开发人员的劳动成果.转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27706303 生命周期分析 在前面文章中我们执行了第 ...

  9. Java对象在JVM中的生命周期

          当你通过new语句创建一个java对象时,JVM就会为这个对象分配一块内存空间,只要这个对象被引用变量引用了,那么这个对象就会一直驻留在内存中,否则,它就会结束生命周期,JVM会在合适的时 ...

随机推荐

  1. vim vi Ubuntu

    在vi编辑模式下按退格键不能删除内容,按方向键不能上下左右移动?如果是则:1. 在vi里非编辑模式下按冒号进入到末行命令模式,然后输入set nocompatible,回车,然后在进入vi编辑模式,看 ...

  2. hibernate学习一(hibernate简介与准备)

    一.hibernate简介 Hibernate是一个开放源代码的对象-关系映射(Object/Relational Mapping 即 ORM)框架,它对JDBC进行了非常轻量级的对象封装,它将POJ ...

  3. 对日期 ,和 master.dbo.spt_values 表操作

    if object_id('tempdb..#xs') is not null drop table #xs; ), date datetime, sale float) insert into #x ...

  4. nginx tomcat session丢失的问题

    nginx反向代理tomcat,出现seesion获取不到的问题. 网上搜索到的解决方案大多是集群tomcat共享session共享的问题,但我这个只有一台tomcat服务器,不涉及到服务器集群问题. ...

  5. 查找Linux中内存和CPU使用率最高的进程

    下面的命令会查看到按照RAM和CPU降序方式的前最高几名进程的列表: [root@iZ25pvjcsyhZ ~]# ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem ...

  6. JS获取元素CSS值

    一.getComputedStyle getComputedStyle 是一个可以获取当前元素所有最终使用的CSS属性值.返回的是一个CSS样式声明对象([object CSSStyleDeclara ...

  7. 打印IP 来源

    <% String userAgent = request.getHeader("User-Agent"); if (userAgent != null && ...

  8. 算法练习_图的连通性问题(JAVA)

    一.问题 1.问题描述: 有n个点(1...n),输入整数对(8,9),表示8,9点之间存在相互的连接关系. 动态连通性问题--编写一段程序过滤掉所以无意义的整数对,即为在不破坏图连通性的前提下,以最 ...

  9. java 对象序列化与反序列化

    Java序列化与反序列化是什么? 为什么需要序列化与反序列化? 如何实现Java序列化与反序列化? 本文围绕这些问题进行了探讨. 1.Java序列化与反序列化  Java序列化是指把Java对象转换为 ...

  10. MySQL索引背后的数据结构及算法原理【转】

    本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...