1、僵尸对象和野指针

  • 僵尸对象:一个OC对象引用计数为0被释放后就变成僵尸对象了,僵尸对象的内存已经被系统回收,虽然可能该对象还存在,数据依然在内存中,但僵尸对象已经是不稳定对象了,不可以再访问或者使用,它的内存是随时可能被别的对象申请而占用的

  • 野指针:指针指向的对象已经被回收掉了.这个指针就叫做野指针

  • EXC_BAD_ACCESS

    • 野指针访问僵尸对象.有的时候会出问题报错EXC_BAD_ACCESS
  • 空指针:是指没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错

2、自旋锁和互斥锁

3、XML,JSON,Protobuf

  • xml

  • json

  • protobuf

4、NSTimer与CADisplay

  • CADisplayLink

    • iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会在每次刷新结束都被调用,精确度相当高

    • iOS设备的屏幕刷新频率(FPS)是60Hz,因此CADisplayLink的selector 默认调用周期是每秒60次,这个周期可以通过frameInterval属性设置, CADisplayLink的selector每秒调用次数=60/ frameInterval。比如当 frameInterval设为2,每秒调用就变成30次。因此, CADisplayLink 周期的设置方式略显不便。

  • NSTimer

    • 以指定的模式注册到runloop后,每当设定的周期时间到达后,runloop会向指定的target发送一次指定的selector消息

    • NSTimer的selector调用周期可以在初始化时直接设定,相对就灵活的多。

    • NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在忙于别的调用,触发时间就会推迟到下一个runloop周期

    • NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间范围。

5、iOS反射机制

  • 获取Class

  • 反射方法

    • NSStringFromClass

    • NSStringFromSelector

    • NSStringFromProtocol

  • 常用判断方法

    • isKindOfClass

    • isMemberOfClass

    • conformsToProtocol

    • respondsToSelector

  • 优点

    • 解耦合,消除类与类之间的依赖
  • 缺点

    • 代码可读性降低,将原有逻辑复杂化了,不利于维护

    • 性能较差

    • 不宜排查错误