美文网首页
IOS面试题(其他) --- 启动/生命周期/加载相关

IOS面试题(其他) --- 启动/生命周期/加载相关

作者: ShawnAlex | 来源:发表于2022-08-30 22:02 被阅读0次

OC面试题目合集地址

问题1: APP生命周期

  • APP冷启动开启

  • dyld 动态链接器, 装载 Mach-O 可执行文件、link动态库等

  • runtime 映射整个镜像文件

    • 条件控制进行一次加载
    • 修复预编译阶段的@selector混乱问题
    • 错误混乱的类处理
    • 修复重映射一些没有被镜像文件加载进来的类
    • 修复消息
    • 如果类里面有协议读取
    • 分类处理
    • 类的加载处理
    • 优化类
  • 准备工作结束后,dyld 就会调用main函数, 接下去UIApplicationMain函数,AppDelegate 中的 application:didFinishLaunchingWithOptions:方法


问题1追问: 简述main之后调用方法

  • 执行mainUIApplicationMain

    • 创建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

相关文章

网友评论

      本文标题:IOS面试题(其他) --- 启动/生命周期/加载相关

      本文链接:https://www.haomeiwen.com/subject/pdtogrtx.html