问题1: APP生命周期
-
APP冷启动开启
-
dyld 动态链接器, 装载 Mach-O 可执行文件、link动态库等
-
runtime 映射整个镜像文件
- 条件控制进行一次加载
- 修复预编译阶段的@selector混乱问题
- 错误混乱的类处理
- 修复重映射一些没有被镜像文件加载进来的类
- 修复消息
- 如果类里面有协议读取
- 分类处理
- 类的加载处理
- 优化类
-
准备工作结束后,dyld 就会调用
main
函数, 接下去UIApplicationMain
函数,AppDelegate 中的application:didFinishLaunchingWithOptions:
方法
问题1追问: 简述main之后调用方法
-
执行
main
→UIApplicationMain
-
创建UIApplication对象
-
创建UIApplication的delegate对象
-
开启消息循环
-
-
delegate对象开始监听系统事件
-
app启动完成后会调用delegate对象的程序加载完成方法
didFinishLaunchingWithOptions
-
如果设置了main storyboard 会创建UIWindow对象(没有则不创建)
-
创建main storyboard中绑定的controller对象(stroyboard中箭 头指向的控制器)
-
设置给window对象的rootViewController
-
设置window对象可见
-
-
问题2: AppDelegate相关代理方法
- 启动基本完成, 程序准备开始运行
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
- 程序将要进入非活动状态
- (void)applicationWillResignActive:(UIApplication *)application
- 程序已进入后台
- (void)applicationDidEnterBackground:(UIApplication *)application
- 程序将要进入前台
- (void)applicationWillEnterForeground:(UIApplication *)application
- 程序进入活跃状态
- (void)applicationDidBecomeActive:(UIApplication *)application
- 程序将要退出
- (void)applicationWillTerminate:(UIApplication *)application
问题2: ViewController的生命周期
当一个视图控制器被创建,并在屏幕上显示的时候。 代码的执行顺序
-
alloc
创建对象,分配内存空间 -
init
对象初始化 -
awakeFromNib
xib或者storyboard创建view, 加载完成之后执行 -
loadView
用于创建Controller的View -
viewDidLoad
View加载完成,视图控制器将视图层次结构加载到内存之后调用 -
viewWillAppear
视图将要出现 -
viewWillLayoutSubviews
通知视图控制器其视图将要布局它的子视图。 -
viewDidLayoutSubviews
通知视图控制器其视图已完成子视图布局。 -
viewDidAppear
视图已完成屏幕上渲染 -
viewWillDisappear
视图将被移除 -
viewDidDisappear
视图已被移除 -
dealloc
视图销毁,对init和viewDidLoad中创建的对象进行释放 -
didReceiveMemoryWarning
如果应用收到内存警告时会调用此方法。
问题3: UIView的生命周期
-
initWithFrame / init
视图初始化 -
didAddSubview
添加子视图 (没有子视图不调用)
initWithCoder
xib初始化视图后调用, 如果xib中添加了子控件会在didAddSubview方法后调用 -
awakeFromNib
xib创建view, 加载完成之后执行 -
willMoveToSuperview
视图即将加入父视图 / 视图即将从父视图移除 调用 -
didMoveToSuperview
视图已加入父视图 / 视图已从父视图移除 调用 -
willMoveToWindow
视图即将加入window视图 / 视图即将从window视图移除 调用 -
didMoveToWindow
视图已加入window视图 / 视图已从window视图移除 调用 -
layoutSubviews
布局子控件 -
drawRect
绘制视图 -
willRemoveSubview
子视图从本视图移除时调用 (没有子视图不调用) -
removeFromSuperview
从父控件中移除 -
dealloc
销毁
问题4: APP启动有几种
-
冷启动
: 从零/杀死启动APP -
热启动
: APP存在后台, 点击APP图标再次启动, Background → Foreground
网友评论