面试一
1、#include 和 #import的区别
主要知识点:递归循环引入
的问题
导入的文推荐格式,均可以导入 C/C++
头文件,#include
还能导入更多格式类似txt
导入的方式:#include
是将文件内容复制到指令处
导入文件的查找方式:#include
当前文件所处文件夹,再找不到就从当前文件夹的父文件夹查找,再不行就是往上推,再找不到就IDE设置的查找路径,再找不到就从系统环境变量配置的地址。
再讲讲"" && <> 的异同。
2、初始化返回值 id 和 instancetype 的区别
- 相同点:
- 都可以作为返回值
- 不同点
- instancetype 可以返回和方法所在类相同类型的对象,id只能返回未知类型的对象
- instancetype 只能作为返回值,id可以作为参数类型
3、成员变量会出发KVO手动触发KVO的方式
成员变量可以
手动触发的方式KVO
4、 RunLoop 的理解 Source0、1的区别
1
是基于端口的。0
是基于非端口的。可以将runloop
启动的过程讲一遍。
主要包含两个observer
, 监听runloop entry
状态,第二个observer
主要监听beforeWaiting
状态和 exit
状态。然后静候面试官的问题,看看想要更深入的了解哪部分的。
5、定时器造成的卡顿的解决方案
按照提问的顺序,面试官可能对RunLoop比较感兴趣,可以讲讲定时器,在runloop中是如何注册事件的。然后讲讲定时器tolerance
的问题,关于注册的事件,被一事件处理耽误过后并不会响应的问题。然后讲讲方案,丢到子线程中(主线程刷新UI),添加到RunLoop中。以及CADisplayer
方案原理需要储备。
6、分类中的同名函数调用顺序
这个问题可以先讨论,一般函数的调用顺序,一般函数调用的顺序其实主要考察了runtime的知识点,关于分类和主类合并的过程中使用的move
和copy
.就是说主类函数后移,分类放在前面。故此处的一般函调用顺序是分类被编译的先后顺序
。这里还有更深入的问题就是load
,initailize
的顺序。
7、关于RunLoop的理解
先用一句话来概述RunLoop
是啥,RunLoop
与线程的对应关系。因为知识点比较庞大,我们可以等面试官来问一下他想知道的点。Jeverson
这里的想知道souce0,1
的事情。然后Jeverosn
讲了区别。然后又继续问了关于定时器在滑动过程为什么不工作的原因。Jeverson
讲了关于runloop``mode
切换的原因导致的。然后讲讲解决方案。
补充RunLoop的知识点还有很多,比如AFN2.x
的常驻线程,常驻线程的使用场景。事件响应过程
,渲染过程
,异步绘制
,子线程使用peformselector:delay:的问题
,NSTimer的问题
last
- 祝大家前程似景,收获自己满意的offer
log
- add the part1 on Feb.27