请稍侯

iOS面试相关基础问题点

23 August 2016

iOS面试相关基础问题点

iOS程序的执行顺序

  • AppDelegate执行顺序
1 进入程序的入口,进入main函数, 设置AppDelegate称为函数的代理
2  程序完成加载:-[AppDelegate application:didFinishLaunchingWithOptions:]
3 创建window窗口
4 程序被激活:-[AppDelegate applicationDidBecomeActive:]
5 当点击command+H时:
    程序取消激活状态:-[AppDelegate applicationWillResignActive:]
    程序进入后台:-[AppDelegate applicationDidEnterBackground:]
6 点击进入工程:
    程序进入前台:-[AppDelegate applicationWillEnterForeground:]
    程序被激活:-[AppDelegate applicationDidBecomeActive:]

参考:

viewController执行顺序及生命周期详解 iOS程序的执行顺序


  • 要点 applicationDidBecomeActive、applicationDidEnterBackground、applicationWillResignActive等方法背后做了哪些事情?

参考:

iOS应用程序生命周期(前后台切换,应用的各种状态)详解

应用程序执行的生命周期

iOS App生命周期初识


  • xcode编译器为什么能识别语法错误等问题?

  • 编译:将C源程序翻译成计算机能识别的0和1; cc -c 文件名.c
  • 连接:将.o文件和C语言函数库组合在一起,生成可执行文件;
  • Xcode中的编译过程分为四个步骤:

      1. 预处理(Pre-process):把宏替换,删除注释,展开头文件,产生 .i 文件。
      2. 编译(Compliling):把之前的 .i 文件转换成汇编语言,产生 .s文件。
      3. 汇编(Asembly):把汇编语言文件转换为机器码文件,产生 .o 文件。
      4. 链接(Link):对.o文件中的对于其他的库的引用的地方进行引用,生成最后的可执行文件(同时也包括多个 .o 文件进行 link)。
    
  • GCC编译的四大过程: 预处理(Pre-processing) -> 编译阶段(Compiling) -> 汇编阶段(Assembling) -> 链接阶段(Link)。

@synthesize:为属性生成读写方法;@dynamic:告诉编译器自己不实现读写方法,而是在其他地方实现(比如父类实现或运行时实现);

@synthesize 与 @dynamic区别 ​​​​