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等方法背后做了哪些事情?
参考:
-
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区别 ? 参考:http://stackoverflow.com/questions/1160498/synthesize-vs-dynamic-what-are-the-differences
@synthesize:为属性生成读写方法;@dynamic:告诉编译器自己不实现读写方法,而是在其他地方实现(比如父类实现或运行时实现);