美文网首页
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