美文网首页
OC 底层面试题

OC 底层面试题

作者: mpyl | 来源:发表于2020-05-01 19:09 被阅读0次
    一、通知(NSNotification)

    使用观察者模式实现的用于跨层传递信息的机制,传递方式是一对多。

    • 如何实现通知机制?
      1.应用服务提供商从服务器端把要发送的消息和设备令牌(device token)发送给苹果的消息推送服务器APNs。
      2.APNs根据设备令牌在已注册的设备(iPhone、 iPad、iTouch、mac等)查找对应的设备,将消息发送给对应的设备。
      3.客户端设备将接收到的消息传递给相应的应用程序,应用程序根据用户设置弹出通知消息。
    二、属性关键字

    1.读写权限:readonly、 readwrite(默认)
    2.原子性:automic(默认)、nonatuomic。automic 读写线程安全,但效率低,而且不是绝对的安全,比如修饰的是数组,那么对数组的读写是安全的,但如果是操作数组进行添加或删除其中对象的话,就不保证安全了。
    3.引用计数

    • retain/strong
    • assign:修饰基本数据类型。修饰对象类型时,不改变其引用计数,会产生悬垂指针,修饰的对象被释放后,assign 指针仍指向原对象内存地址,如果使用 assign 指针继续访问原对象的话,就可能导致内存泄漏或程序异常。
    • weak:不改变被修饰对象的引用计数,所指对象在被释放后,weak 指针会自动置为 nil
    • copy:分为深拷贝和浅拷贝
      深拷贝:对对象内容的复制,开辟新的内存空间
      浅拷贝:对内容地址的复制,让目标对象指针和原对象指向同一片内存空间,会增加引用计数。
      • 可变对象的 copy 和 mutableCopy 都是深拷贝
      • 不可变对象的 copy 是浅拷贝,mutableCopy 是深拷贝
      • copy 方法返回的都是不可变对象
      • @property(nonatomic,copy)NSMutableArray*array;这样写有什么影响?
        因为 copy 方法返回的是不可变对象,所以 array 对象实际上是不可变的,如果对其进行可变操作如添加移除对象,则会造成程序 crash

    相关文章

      网友评论

          本文标题:OC 底层面试题

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