生命周期

生命周期

2、简述应用生命周期

App启动:当App启动时,首先由not running状态切换到inactive状态,此时调用application:didFinishLaunchingWithOptions:方法;然后由inactive状态切换到active状态,此时调用applicationDidBecomeActive:方法。当App发生中断时,由active状态切换到inactive状态,此时调用applicationWillResignActive:方法。

来回切换App:当切换到另一个App时,由状态active切换到inactive,此时调用applicationWillResignActive:方法;然后从inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。而当切换回本来的App时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground:方法,然后由inactive状态切换到active状态,调用applicationDidBecomeActive:方法。

锁屏:当手机锁屏时,由状态active切换到inactive,此时调用applicationWillResignActive:;然后再由inactive状态切换到running状态,此时调用applicationDidEnterBackground:方法。

系统常常是为其他app启动时由于内存不足而回收内存最后需要终止应用程序,但有时也会是由于app很长时间才响应而终止。如果app当时运行在后台并且没有暂停,系统会在应用程序终止之前调用applicationWillTerminate:来保存用户的一些重要数据以便下次启动时恢复到app原来的状态。

http://www.cocoachina.com/industry/20140710/9089.html

3、简述视图生命周期

viewController叫做视图控制器。对内是用于管理视图,对外则是与其他的viewcontroller进行通信。它继承于NSObject。它分为两种类型,一种叫contentViewController,内容视图控制器,主要用于体现内容 如UITableView UIViewController这种直接显示内容的;还有一种叫做containerViewController,容器视图类。典型的就是tabBar,和navigation.它还包含好几个其它的viewController.

每个view都有一个viewController。且view的生命周期也在viewController里面。所以在view释放之前,viewcontroller是不可以释放的。

step1:initWithNib    viewController会进行alloc,并init.

step2: loadView在这里会看它的子类是否有重写这个函数,如果重写了则调用子类的,否则就调用她自己的。注意,这个时候视图还是没有没加载进来的哦。

step3:viewDidLoad这个时候视图已经存在了。可以在这里添加你想要添加的UI控件了。

step4:viewWillAppear视图将出现在屏幕上了

step5:viewDidAppear视图已经成功在屏幕上渲染完成了

step6:viewWillDisappear视图将要消失了

step7:viewDidDisappear视图从屏幕上消失了

step8:viewDidUnLoad当发生内存警告的时候,如果本视图不是当前正在显示的视图,则会执行这个函数。将子视图释放。

step9:dealloc释放viewController

而view的生命周期则是step3——step8.

viewController的生命周期就是step1——step9

7、ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?

当程序接到内存警告时View Controller将会收到这个消息:didReceiveMemoryWarning

从iOS3.0开始,不需要重载这个函数,把释放内存的代码放到viewDidUnload中去。

这个函数的默认实现是:检查controller是否可以安全地释放它的view(这里加粗的view指的是controller的view属性),比如view本身没有superview并且可以被很容易地重建(从nib或者loadView函数)。

如果view可以被释放,那么这个函数释放view并调用viewDidUnload。

你可以重载这个函数来释放controller中使用的其他内存。但要记得调用这个函数的super实现来允许父类(一般是UIVIewController)释放view。

如果你的ViewController保存着view的子view的引用,那么,在早期的iOS版本中,你应该在这个函数中来释放这些引用。而在iOS3.0或更高版本中,你应该在viewDidUnload中释放这些引用。

7.应用程序在启动的时候主要做了什么操作?

答:应用程序在启动的时候,会执行main函数,而main函数里面主要执行了UIApplicationMain函数。UIApplicationMain函数执行完主要做了以下三个操作:

(1)创建应用程序UIApplication对象。

(2)创建了应用程序代理对象。默认的应用程序代理对象是AppDelegate。

(3)建立一个事件循环RunLoop。用来实时监测应用程序中的各种事件(触摸,晃动,远程控制事件,通知,观察者,timer等等)。

8.请描述一下viewController几个重要方法的执行时机

答:视图控制器的生命周期分为创建、 显示 和 销毁。

(1)创建

xxx *x = [[xxx  alloc] init]  //作用:分配内存空间,创建控制器时使用

(2)加载和显示:

- (void)loadView: //作用:加载根视图(即为self.view赋值),在控制器view属性的getter方法首次调用的时候执行此方法。

根视图已加载:

- (void)viewDidLoad// loadView执行完毕之后,立即执行此方法。作用:给创建好的控件设置值,做网络请求,开启timer等

loadView和viewDidLoad当首次访问controller的根视图时才会执行,即view属性的getter方法首次使用时执行,loadView执行在前,viewDidLoad执行在后。

如果重写了loadView一定要给控制器的根视图赋值(self.view = xxView;),在给控制器的根视图赋值的之前,不能使用控制器view属性的getter方法,否则会重复执行loadView和viewDidLoad方法。

视图将要显示:

- (void)viewWillAppear:

视图将要被添加到UI层级上,还没有添加时执行。(此时视图还没有显示)

视图已经显示:

- (void)viewDidAppear

视图已经被添加到UI层级上,视图已经显示出来时执行。(视图已经显示)

视图将要消失:

- (void)viewWillDisappear:

视图将要被从UI层级上面移除,但视图还没有移除时执行。 (视图还可见)

视图已经消失:

- (void)viewDidDisappear:

视图已经从UI层级上面移除,视图已经不可见时执行。 (视图不可见)

(3)销毁:

- (void)viewWillUnload

iOS6.0之后已经被弃用。iOS 5.0之前,当低内存且控制器的view不需要使用的时候会调用这个方法,即当控制器的根视图 将要 被释放时执行([vc.view release],vc.view还未置空),我们可以在这个方法中移除一些跟视图相关的观察者和通知,并记录视图的状态,以便之后重新创建视图。iOS6.0之后不再需要做释放了,该方法也被遗弃了。

- (void)viewDidUnload

iOS6.0之后已经被弃用。iOS 5.0之前,当低内存且控制器的view不需要使用的时候会调用这个方法,即当控制器的根视图被释放时执行([vc.view release],vc.view已经为nil),这个方法给我们一个机会做内存的相关清理工作,如果控制器对某些视图有引用,可以在这里释放这些引用,同样可以释放一些懒加载的对象,但是不要释放那些不容易重新加载的数据。iOS6.0之后不再需要做释放了,该方法也被遗弃了。

21.简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?

应用程序的状态:

Not running:未运行,程序没启动

Inactive   :未激活,程序在前台运行,不过没接受到事件,没有事件处理的状态下通常处于这个状态。

Active         :激活   程序在前台并且接收到了事件

Backgound :后台   程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。

Suspended :挂起  程序在后台不能执行代码。

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

//告诉代理进程启动但还没进入状态保存

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

//告诉代理启动基本完成程序准备开始运行

- (void)applicationWillResignActive:(UIApplication *)application

//当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了

- (void)applicationDidBecomeActive:(UIApplication *)application

//当应用程序入活动状态执行,这个刚好跟上面那个方法相反

- (void)applicationDidEnterBackground:(UIApplication *)application

//当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可

- (void)applicationWillEnterForeground:(UIApplication *)application

//当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。

- (void)applicationWillTerminate:(UIApplication *)application

//当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。

- (void)applicationDidFinishLaunching:(UIApplication*)application

//当程序载入后执行

22.描述应用程序的启动顺序。

①、程序入口main函数创建UIApplication实例和UIApplication代理实例

②、在UIApplication代理实例中重写启动方法,设置第一ViewController

③、在第一ViewController中添加控件,实现对应的程序界面。

23.ViewController的alloc,loadView。viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?(UI第三讲 自定义视图、视图控制器)alloc初始化当前的ViewController

loadView:没有正在使用nib视图页面,子类将会创建自己的自定义视图层

viewDidLoad:试图被加载后调用

viewWillAppear:试图即将出现的时候调用

viewDidUnload:当系统内存吃紧的时候会调用该方法,释放掉当前未在window中显示的试图和对应的控制器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,835评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,598评论 1 295
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,569评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,159评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,533评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,710评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,923评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,674评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,421评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,622评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,115评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,428评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,114评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,097评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,875评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,753评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,649评论 2 271

推荐阅读更多精彩内容