一、内存管理
1、循环引用
四个关键字 strong assign weak copy 对比
引用计数器问题
- alloc init 出来的对象 默认计数器是1,需要在delloc的时候进行release
- 对象内存被释放的逻辑: 当计数器的值为0的时候,系统会向dealloc发送一条消息,自动执行
2、atomic nonatomic对比
__weak 和 __block 对比
block和代理的区别
3、定时器的问题
二、runtime问题
1、message send找不到方法的解决
2、category添加属性
三、APP优化调试
1、APP启动时间过长 该怎样优化
2、怎么解决 EXC_BAD_ACCESS
四、UI基础
1、storyboard/xib和纯代码构建UI相比,有哪些优点和缺点
优点
- 简单直接,直接拖动,界面所见即所得
- 跳转关系清楚
缺点
- 多人员开发容易引发冲突
- 很难做到界面的继承和重用
- 不便于模块化管理
- 影响性能,多涂层渲染,而且不便于优化代码
2、Auto Layout 和Frame在布局和渲染上的区别
- Auto Layout 是针对多尺寸屏幕的设计
- Frame是基于XY坐标轴系统的布局机制
- Auto Layout 的性能比Frame差很多,其实前者是通过求解现行不等式转化成frame再进行布局,而求解的计算量是比较大的,性能差10倍以上
- 解决办法:尽量压缩视图等级,减少计算量,同时layout可以通过后台线程来处理,这样就不阻塞主线程,计算结果也可以被缓存。
3、UIView和CALayer 的差别
- UIView和CALayer都是UI操作的对象
- UIView是CALayer用于交互的对象
- CALayer再图像和动画渲染上性能更好
4、frame和bounds的区别,bounds能设置成负数吗
- frame是指当前视图相对于父视图的平面坐标系统中的位置和大小
- bounds 是指当前视图相对于自己的平面坐标系统中的位置和大小
- bounds的值是可以为负数的,比如设置scrollview的contentoffset的时候,但是bounds是不可以手动设置的
5、layoutIfNeeded,layoutSubviews和setNeedsLayout的区别
- layoutSubviews, 当我们在某个类的内部调整子视图位置时,需要调用。这个方法,默认没有做任何事情,需要子类进行重写
- setNeedsLayout方法: 标记为需要重新布局,异步调用layoutIfNeeded刷新布局,不立即刷新,但layoutSubviews一定会被调用
- layoutIfNeeded方法:如果,有需要刷新的标记,立即调用layoutSubviews进行布局(如果没有标记,不会调用layoutSubviews)
6、如果一个列表滑动很慢,怎么优化
- 列表渲染时间较长,可能是因为某些空间比较复杂,或者图层过多
- 界面渲染后,可能大量的操作或者耗时的计算阻塞了主线程
- 数据源问题,数据回来的慢,主线程处理更新不及时
7、离屏渲染 圆角 遮罩 不透明度 阴影 渐变 光栅化和抗锯齿触发
如何解决masksToBounds离屏渲染带来的性能损耗
- 由于这样处理的渲染机制是GPU在当前屏幕缓冲区外新开辟的一个渲染缓冲区进行工作,即离屏渲染
- 将圆角的任务交给CPU, 使用CALayer提供的shouldRasterize属性,该属性是社会光栅化,可以使离屏渲染的结果缓存到内存中存为位图,当下次使用的时候直接使用内存缓存。
- 通过Core Graphics绘制出圆角图片
- 通过透明圆的图片覆盖
drawRect方法
- 当视图在屏幕中出现的时候,就会被调用,在loadView和viewDidLoad方法之后。
五、网络部分
1、session和cookie的概念
2、在一个HTTPS种,输入账号和密码登录后,到服务器返回前,这期间经历了什么
- 客户端打包请求,把相关信息加到post的body种
- 服务端接受请求
- 服务器端返回数字证书
- 客户端生成加密信息
- 服务端解锁加密信息
- 服务端向客户端返回信息
- 客户端解锁返回的信息
3、远程推送的原理
- App向iOS系统申请远程消息推送的权限
- iOS系统向APNs服务器请求手机的devicetoken,并告诉app,允许接受推送的通知
- app接收手机端的deveicetoken
- app将接收到的token传给服务端
- 远程消息由app对应的服务端产生,它会先经过APNs服务器
- APNs服务器将远程通知推送给相应的手机
- 根据对应的token 通知会推送到指定的手机设备
六、多线程
七、设计模式
- MVC:将不同的代码归并为不同的模块,做到低耦合、代码分配合理、易于维护和扩展
- 单例
- 观察者: 通知和KVO
1、MVC的优缺点
优点:
- 代码总量少, MVC大量的逻辑和视图代码都集中在vc种,view和model也严格区分,代码分配遵循一定的规则
- 简单易懂,代码比较直接
缺点:主要是由视图层和控制器层高度耦合造成的
- 代码过于集中
- 难以进行测试,主要是单元测试不容易分模块测试
- 难以扩展,依赖程度比较高,逻辑荣乱
- Model过于简单
- 网络请求逻辑无处安放
2、MVC、MVP、MVVM的区别
八、测试
1、如何检查测试覆盖率
2、iOS中的性能测试
3、提交App Store被拒的原因
- crash
- 需要第三方
- 版权
- 材料不全













网友评论