美文网首页
基础总结

基础总结

作者: CoderLF | 来源:发表于2019-01-01 14:04 被阅读11次

一、内存管理

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
  • 需要第三方
  • 版权
  • 材料不全

相关文章

网友评论

      本文标题:基础总结

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