博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生命周期
阅读量:5286 次
发布时间:2019-06-14

本文共 2810 字,大约阅读时间需要 9 分钟。

对于一个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等可能会造成野指针、也通知的变量需要在此手动释放。

转载于:https://www.cnblogs.com/zhanghuifeng/p/4468404.html

你可能感兴趣的文章
eclipse添加xsd
查看>>
域名空间那些事 第二季
查看>>
【2007-4】【鹅卵石图案】
查看>>
利用余数选择特殊位置元素
查看>>
position-relative 的问题
查看>>
浏览器视口宽度高度的封装
查看>>
jquery UI 弹出框
查看>>
CSS之float(解决float自增长高度问题)
查看>>
Java设计模式——策略模式(Strategy Pattern)
查看>>
Index Filter及ICP特性
查看>>
scanf格式控制符之%[]的应用
查看>>
Python 多线程教程:并发与并行
查看>>
一步步学习微软InfoPath2010和SP2010--第十四章节--高级选项(1)--InfoPath规则检查器...
查看>>
SharePoint 2013 Installation and Configuration Issues
查看>>
常用处理数据用法es6 语法糖总结
查看>>
源代码管理工具 GIT的使用
查看>>
javascript 调用 IndexedDb示例
查看>>
如何使用Iveely的数据存储引擎 Iveely Database
查看>>
[Matlab]一个数据集的处理
查看>>
创建的vue项目出错的时候,提示This dependency was not found错误的处理方法
查看>>