面试准备
-
runloop理解
- runloop其实是一个函数,内部是do-while循环。
- 它接受两种不同类型的源来处理事件
- 输入源提供异步事件
- 计时器源提供同步事件
- 苹果用runloop 实现了5种不同的功能;
- APP默认mode,通常主的线程在这个mode下执行
- 界面追踪mode,用于 scrollview 追踪触摸滑动,保证界面滑动时不受其他mode影响
- 启动时mode
- 接受系统事件mode
- 占位mode
-
除了UIKit 和 Foundation 这两个常用的系统框架外,还有那些其他的系统框架?
- cocoa touch :UIkit
- cocoa serveice:foundation
- media:媒体层
- coce os:系统层
- 用到的比如有 healthkit、gameKit、clound、ML、AR。
-
直接继承于UIView 的子类有哪些?
- 最底层的一个UIWindow
- button、switch、textField、segment 都是继承自uicontroller
- label、scrollview、imageview、uitabbar
-
ios 与 c ,c++ 混编, 遇到过什么 问题?
-
.NSUserdefaults 对setObject 的 object有大小限制吗?读取时是将整个userDefaults读取,还是只读取某个数据?
- 没有
- 它本质是一个plist文件,查找的时候回遍历一遍,所以存大数据不妥
-
.程序启动时,Appdelegate 会调用什么回调方法?
- 启动会调用didfinishlunchingwithoptions 方法
- 锁屏、电话、短信 会调用willresignactive方法
- become nactive 是当程序全新启动时调用的
- DidEnterBackground : 进入后台
- WillEnterForeground: 从后台进入前台,如果不是在后台则不走这个方法
-
如何读取一个2g文件的其中一段,例如读取第100-200字节的数据?
- 如果是确定的多少到多少 ,可以把大文件分成一个一个的小文件进行操作
- 虚拟内存映射,读取到硬盘中,跟内存读取速度差不多
-
GCD
- GCD可以指定串行还是并行、也可以指定优先级
- 通过block来处理回调
- 防止形成死锁,比如说在串行线程回调里又写了一个同步线程
-
block
- 本质上是一个匿名函数
- 使用时注意使用copy,函数体内注意循环引用,修改函数体内的参数需要使用 __block 修饰
-
KVC
- 建值编码,简化了Model的处理
- 可以访问SDK中 .h 中的成员变量
- 正常访问一个对象的值都需要get或set方法,但是KVC支持在运行时动态的改变对象的属性值。
-
KVO
- 依靠运行时动态创建该类的子类,然后重写被观察的setter方法,setter方法监听方法是否被调用来发起通知
-
runtime
- oc 的动态机制和面向对象的基础
-
网络通讯机制
-
struct和class的区别
- 成员的默认访问权限,struct是public,class是private
-
观察者模式
- 本质上是发布-订阅,用于对不同对象之间的解耦
- 用途有两个:1:将改变发送给所有对象,但是不知道这些对象的具体类型;代表有notification
- 2:改变发生在同一个对象中,要改变其他的与之相关的对象且不知道对象有多少个;代表有kvo
-
在一个https连接的网站里,输入账号密码点击登录后,到服务器返回这个请求前,中间经历了什么?
- 客户端发起请求,将数据传给服务器
- 服务器分析是否发送密钥给客户端
- 发送密钥给客户端
- 客户端拿到密钥对信息进行加密
- 客户端发送加密信息
- 服务端返回加密信息
- 客户端解密信息
- 客户端显示信息
-
在一个app中间有一个button,在你手触摸屏幕点击后,到这个button收到点击事件,中间发生了什么?
- 设备将touch得到的UItouch 和 UIEvent 对象打包,放到Application事件队列
- Application 从事件队列中取出触摸事件传递给UIWindow
- UIWindow调用hitTest:withEvent:方法找到touch事件所在view
runloop中的体现
1. runloop被唤醒
2. 处理输入源异步事件
3. runloop进入休眠









网友评论