美文网首页
2018-12-12

2018-12-12

作者: 欺魄小妖 | 来源:发表于2019-03-17 15:43 被阅读0次

    面试题

    https://www.jianshu.com/p/527736ee25cc  AF原理

    https://www.jianshu.com/p/9a36568c440c  SD原理

    https://www.jianshu.com/p/37b907cbd0e3  MVC

    1.NSString为什么要用copy关键字,如果用strong会有什么问题?

    https://blog.csdn.net/qq_34900204/article/details/73932866

    2. nonatomic和atomic的区别?atomic是绝对的线程安全么?为什么?如果不是,那应该如何实现?

    A:nonatomic和atomic的区别在于两者自动生成getter和setter的方法不一样,如果你自己写getter和setter方法,那么(getter,setter,retain,copy,assign)只起提示作用,写不写都一样。

    对于atomic的属性,系统生成的getter和setter会保证get,set的操作完整性,不受其他线程影响。比如线程A的getter方法运行到一半,线程B调用了setter,那么线程A的getter还是能得到一个完整的对象。

    而nonatomic就没有这个保证了,所以速度要比atomic快。

    不过atomic可不能保证线程安全,如果线程A调用了getter,与此同时线程B和线程C都调了setter,那最后线程Aget到的值,三种都有可能:可能是B,C set之前原始的值,也可能是B set的值,也可能是C set的值。同时这个最终的值,也可能是B set的值,也可能是C set的值。要保证安全,可以使用线程锁。

    3.NSCache优于NSDictionary的几点?

    A:NSCache 是一个容器类,类似于NSDIctionary,通过key-value 形式存储和查询值,用于临时存储对象。

    注意一点它和NSDictionary区别就是,NSCache 中的key不必实现copy,NSDictionary中的key必须实现copy。

    NSCache中存储的对象也不必实现NSCoding协议,因为毕竟是临时存储,类似于内存缓存,程序退出后就被释放了。

    4.NSAutoreleasePool 是怎么工作的?

    自动释放池以栈的形式实现:当你创建一个新的自动释放池时,它将被添加到栈顶。当一个对象收到发送 autorelease 消息时,它被添加到当前线程的处于栈顶的自动释放池中,当自动释放池被回收时,它们从栈中被删除, 并且会给池子里面所有的对象都会做一次 release 操作.

    相关文章

      网友评论

          本文标题:2018-12-12

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