网上搜集到的一些面试题,这里总结了一下答案。
一、说说iOS的反射机制
-
反射机制
:在程序运行时能动态地创建一个类的对象、获取类的方法及成员变量、调用类的方法。 - OC中实现
反射机制
的底层是runtime,在开发中具体使用有:字典转模型、模型转字典、解档归档(NSCoding)。 - 系统提供的OC方法见:iOS反射机制
二、多线程方案比较NSOperation与GCD
- NSOperation是基于GCD封装的一套API,具有很方便使用的功能,性能上要比GCD更低一些。
- NSOperation提供方法很简单地实现依赖关系、KVO观察当前操作的状态、任务优先级、任务取消、继承NSOperation去新建子类实现更多的功能。
GCD 和 NSOperation 区别及各自应用场景
三、iOS APP如何实现无痕埋点?
- 无痕埋点系统应该具备自动收集用户点击事件、页面跳转信息、及时上传到服务器。
- OC是动态的语言,可以hook系统方法的方式去收集用户点击事件、页面跳转信息,在合适的时机上传。
- 无痕埋点统计的信息量比较多,根据自己的APP实际需要来选择用这个方式还是另外的
代码埋点
、可视化埋点
。
四、启动时间优化思路?
- iOS程序冷启动的过程:系统读取可执行文件(mach-o) -》加载
dyld
动态链接器 -》dyld
初始化运行环境并配合ImageLoader
将文件加载到内存中 -》dyld
去链接依赖库并初始化Runtime
-》Runtime
对类进行初始化调用load
方法 -》调用main
函数 -》UIApplicationMain
函数-》AppDelegate
-》第一个页面。 - 所以减少启动时间的方式是:
- 尽量减少项目中文件和类的数量,删除没有使用的文件;2.减少动态库的数量。
iOS 程序启动过程
iOS app 启动时间优化分析
- 尽量减少项目中文件和类的数量,删除没有使用的文件;2.减少动态库的数量。
五、怎样来避免APP的奔溃?
- NSInvalidArgumentException 异常:向容器加入nil,引起的崩溃,-》runtime交换系统方法来解决。
- BAD_ACCESS,坏内存访问,代码要注意不出现访问已经释放的对象。
- NSRangeException 异常。这种就应该去避免越界。
- unrecognized selector sent to instance调用未实现的方法。
iOS Crash 杀手排名
六、怎样避免APP卡顿?(有CPU和GPU卡顿)
针对CPU具体有:
- 避免频繁修改UIView的相关属性如:frame、bounds、transform。
- 尽量提前计算好布局并保存,在需要调整时直接赋值。
- AutoLayout比设置frame更加消耗CPU。
- 图片的size跟imageview的size保持一致。
- 把耗时的操作放到子线程。如:文本处理(尺寸计算、绘制)、图片处理(解码(先将图片绘制到上下文中生成后再返回一张UIImage,不这样做的话默认是在主线程完成解码)、绘制)。
针对GPU的有:
- 减少视图数量和层次。
- 大量图片的显示尽量将多个小图合并成一张大图来显示。
- 不要超过GPU能处理的最大纹理尺寸4096x4096,不然会占用到CPU资源.
- 减少透明的视图。
- 尽量避免离屏渲染。
APP卡顿优化学习总结
网友评论