美文网首页
美团iOS面试题

美团iOS面试题

作者: Olivia_S | 来源:发表于2021-03-21 23:59 被阅读0次

    1.说一下kvo以及底层实现,kvo其实调用了什么方法

    当需要对一个对象a进行监听时,系统会生成一个a当前类A的子类NSKVONotifying_A,NSKVONotifying_A中会重写setter方法,a的isa指针由指向A变为指向NSKVONotifying_A,重写的setter方法负责在调用原setter方法之前和之后通知所有观察者


    image.png

    kvo实际调用了willChangeValueForKey和didChangeValueForKey

    2.runtime在项目中的使用

    1.动态添加成员变量和方法
    2.拦截系统自带的方法调用
    3.字典和模型的相互转换
    4.给系统的类增加属性

    3.属性的几种修饰词

    属性的修饰词:
    atomic/nonatomic,assign/retain/weak/strong/copy,readolny/readwrite

    4.delegate可以用assign吗

    delegate可以用assign,assign和weak修饰的对象被引用时,引用计数都不会+1,但是在释放的时候,weak会将指针置为nil,assign不会,导致野指针,所以当delegate被释放的时候,需要手动将指针置为nil

    5.atomic为什么不能保证线程安全,用atomic修饰NSMutableArray是线程安全的吗

    atomic是原子级线程安全,原子级的意思是一个整体,就是对这个对象整体的get和set方法进行了加锁,但是修改对象中包含的对象不能实现线程安全,如果用atomic修饰数组,修改数组中的对象不是线程安全的

    6.消息机制,消息转发
    7.启动时间多长,做过什么优化
    8.项目中用到过锁吗?有哪几种锁

    iOS中锁分为两种:
    1.互斥锁: 互斥锁在被持有的状态下,其他资源申请者只能进入休眠状态,当锁被释放后,CPU会唤醒资源申请者,然后获得锁并访问资源。
    2.自旋锁: 自旋锁不会引起其他调用者休眠,而是让其他调用者自旋,不停的循环访问自旋锁导致调用者处于busy-wait(忙等状态),直到自旋锁的保持者释放锁。


    image.png

    效率如下图


    image.png

    相关文章

      网友评论

          本文标题:美团iOS面试题

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