Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3121
  • 博文数量: 2
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 20
  • 用 户 组: 普通用户
  • 注册时间: 2015-08-19 01:30
文章分类

全部博文(2)

文章存档

2015年(2)

我的朋友
最近访客

分类: iOS平台

2015-08-20 10:04:54

小编技术博客:goofyy技术宅
百度搜索:goofyy

goofyy小编最近暑假在公司一直做thinkPHP后台开发和前台的开发,小编最近也是好少玩swift和ios了。刚把laravel搞完。小编最近也是从一些基础的看起。之前做过笔记,但是逐渐忘记。废话不多说,进入正题

首先像别人一样,小编说一下ios程序的几种状态

ios程序的几种状态

未运行:  not running  程序未运行

未激活:  inactive        程序已经运行,但是没有接受到事件,通常保持当前状态

激活   :  active           程序已经运行,并且接收到了事件,(点击,滑动等等事件)。

后台   :  background   程序在后台运行,并且能够执行代码,一般程序在这个状态上停留一段事件,然后就进入挂起状态,但是有一些却是一直执行,例如某些计步软件

挂起    :suspended     程序一直在后台,长期处于background。

挂起   :   suspended      这一部分程序比较特殊,程序也是留在内存中,但是不发送通知,内存低的时候,就会被清除。

官网上一幅比较经典的图如下:

1348823833_6296

简单解释一下吧:程序首先是处在不运行(not runnig)状态,然后,用户点击程序图标,然后进入程序,操作程序进入active。点击home键进入后台,进入挂起状态,这时候如果内存比较低的时候,将会把挂起的程序从内存中清除,当用户又一次点击该程序图标的时候,将会激活程序,让程序从挂起进入acitive状态。

理论说了一大遍。然后我们来具体看一下工程文件。

首先是从程序入口出发,main函数,


#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}
首先我们还是从oc程序分析,哈哈。相信这个可以让我们读到更多东西,整个main.m文件只看一句话



return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
首先是返回值调用了UIApplicationMain函数,然后调用个几个参数,主要是传AppDelete一个类,看一下AppDelete.m。可以知道AppDelete是一个实现了delegate委托的对象,但是在swift工程当中,main.m被隐藏了,然后我们就可以直接去看AppDelete.swift。简单看一下AppDelete.swift


import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
这里用一个元数据的方式声明了UIApplicationMain调用了AppDeletegate,而AppDeletegate是UIResponder的一个基类,显然要接受用户的交互响应,同时也实现了UIApplicationDeletegate的接口(协议),而在实现UIApplicationDeltegate协议的时候,使用了UIApplication对象,UIApplication是当前程序的一个实例,然后我们来画图说一下刚刚的关系,有点乱啊。哈哈哈



Screen Shot 2015-08-14 at 12.37.54 AM

ok。让我们来结合图说一下,举个例子,有个工匠(Application)做鞋子,做的越来越多,需要雇佣工人,然后,他雇佣了一批工人(Appdelegate)..然后告诉他们做鞋子的流程UIApplicationDelegate,也就是说,UIApplication是应用程序的真正实例,同时有一些委托的具体的协议,而被委托者Appdelegate来实现这些协议。而执行的具体的协议的通用对象是UIApplication。所以程序执行的每一步,具体通用对象UIApplication都可以接受到。


func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        return true
    }

    func applicationWillResignActive(application: UIApplication) {

    }

上面就是IOS设计用到的一个委托设计模式。知道了上面的整个过程,就可以看一下程序的整个生命周期了。

启动程序


开始加载程序   -------> willFinishLaunchingWithOptions

程序加载完毕   ------> didFinishLaunchingWithOptions


程序获取焦点  ------->applicationDidBecomeActive

按下Home键

失去焦点     -------->applicationWillResignActive

进入后台    --------->applicationDidEnterBackground

双击Home打开程序

从后台回到前台      ------>    applicationWillEnterForeground

获取焦点    ----->applicationDidBecomeActive

内存警告

内存警告    ----->applicationDidReceiveMemoryWaring

退出程序   ------>applicationWillTerminate

给几个官网给的流程图大家可以看一下

程序在前台运行

1348884482_7300

程序进入后台

1348884525_3194


阅读(175) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:swift2.0语言新特性

给主人留下些什么吧!~~