美文网首页iOS面试
iOS高级开发一份面试题附答案(三)

iOS高级开发一份面试题附答案(三)

作者: Sweet丶 | 来源:发表于2020-04-15 17:30 被阅读0次

    网上搜集到的一些面试题,这里总结了一下答案。

    一、说说iOS的反射机制
    1. 反射机制:在程序运行时能动态地创建一个类的对象、获取类的方法及成员变量、调用类的方法。
    2. OC中实现反射机制的底层是runtime,在开发中具体使用有:字典转模型、模型转字典、解档归档(NSCoding)。
    3. 系统提供的OC方法见:iOS反射机制
    二、多线程方案比较NSOperation与GCD
    1. NSOperation是基于GCD封装的一套API,具有很方便使用的功能,性能上要比GCD更低一些。
    2. NSOperation提供方法很简单地实现依赖关系、KVO观察当前操作的状态、任务优先级、任务取消、继承NSOperation去新建子类实现更多的功能。
      GCD 和 NSOperation 区别及各自应用场景
    三、iOS APP如何实现无痕埋点?
    1. 无痕埋点系统应该具备自动收集用户点击事件、页面跳转信息、及时上传到服务器。
    2. OC是动态的语言,可以hook系统方法的方式去收集用户点击事件、页面跳转信息,在合适的时机上传。
    3. 无痕埋点统计的信息量比较多,根据自己的APP实际需要来选择用这个方式还是另外的代码埋点可视化埋点
    四、启动时间优化思路?
    1. iOS程序冷启动的过程:系统读取可执行文件(mach-o) -》加载dyld动态链接器 -》dyld初始化运行环境并配合ImageLoader将文件加载到内存中 -》dyld去链接依赖库并初始化Runtime -》Runtime对类进行初始化调用load方法 -》调用main函数 -》UIApplicationMain函数-》AppDelegate -》第一个页面。
    2. 所以减少启动时间的方式是:
      1. 尽量减少项目中文件和类的数量,删除没有使用的文件;2.减少动态库的数量。
        iOS 程序启动过程
        iOS app 启动时间优化分析
    五、怎样来避免APP的奔溃?
    1. NSInvalidArgumentException 异常:向容器加入nil,引起的崩溃,-》runtime交换系统方法来解决。
    2. BAD_ACCESS,坏内存访问,代码要注意不出现访问已经释放的对象。
    3. NSRangeException 异常。这种就应该去避免越界。
    4. unrecognized selector sent to instance调用未实现的方法。
      iOS Crash 杀手排名
    六、怎样避免APP卡顿?(有CPU和GPU卡顿)

    针对CPU具体有:

    1. 避免频繁修改UIView的相关属性如:frame、bounds、transform。
    2. 尽量提前计算好布局并保存,在需要调整时直接赋值。
    3. AutoLayout比设置frame更加消耗CPU。
    4. 图片的size跟imageview的size保持一致。
    5. 把耗时的操作放到子线程。如:文本处理(尺寸计算、绘制)、图片处理(解码(先将图片绘制到上下文中生成后再返回一张UIImage,不这样做的话默认是在主线程完成解码)、绘制)。

    针对GPU的有:

    1. 减少视图数量和层次。
    2. 大量图片的显示尽量将多个小图合并成一张大图来显示。
    3. 不要超过GPU能处理的最大纹理尺寸4096x4096,不然会占用到CPU资源.
    4. 减少透明的视图。
    5. 尽量避免离屏渲染。
      APP卡顿优化学习总结

    相关文章

      网友评论

        本文标题:iOS高级开发一份面试题附答案(三)

        本文链接:https://www.haomeiwen.com/subject/bwzrmhtx.html