面试技巧攻克-iOS中对象间通信机制

一、delegate和block

1、delegate和block的区别?block需要注意什么?

delegate由代理设计模式演变而来,block是一种闭包的实现。
block的优点:
(1)更轻便,使用也简单
(2)能够直接访问上下文
(3)易于阅读
缺点:
(1)如果有多个方法,需要每个方法实现一个block,很烦琐
(2)可能会造成循环引用
(3)block使用会出现内存复制,成本更高
delegate优点:
(1)设计更加清晰,规范
(2)易于书写文档
(3)当有多个相关方法时,实现更加简单
(4)使用成本低
缺点:
(1)代码更为复杂
(2)不易于阅读和维护

2、delegate修饰词使用weak,为什么不适用strong和assign?

使用weak修饰,指向指针的对象不会被持有,引用计数不变,当指针指向的对象被释放时,会置为nil,使用strong的话会持有对象,这样会引起循环引用,使用assign和weak是相同的,唯一的区别就是当指向的对象被释放后,weak置为nil,再次发送消息,不会崩溃,而assign则成为野指针,再次发送消息,会引起崩溃。

二、KVC和KVO

1、什么是KVC和KVO?

KVC - Key-Value-Coding 键值编码是一种使用字符串间接访问对象属性的一种机制。键值编码的间接访问方式其实是存取方法的一种代替,通过键值编码可以访问对象的公有变量和私有变量。

- (nullable id)valueForKey:(NSString *)key;
- (void)setValue:(nullable id)value forKey:(NSString *)key;

- (nullable id)valueForKeyPath:(NSString *)keyPath;
- (void)setValue:(nullable id)value forKeyPath:(NSString *)keyPath;

KVO - Key-Value-Observing 键值观察是基于KVC实现的一种观察者机制,提供了观察对象的某一个属性变化的监听方法。

//监听方法
- (void)addObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath options:(NSKeyValueObservingOptions)options context:(nullable void *)context;
//移除监听方法
- (void)removeObserver:(NSObject *)observer forKeyPath:(NSString *)keyPath;

//通知方法
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context;

2、KVO的原理是什么?

KVO利用runtime的机制,当对一个对象进行观察时,会在运行时创建一个该对象的子类,这个子类一般以NSKVONotifying_xxx(xxx为父类的名字)命名,子类中会重写所有被观察属性的set方法,除了创建子类,还会将该对象的isa指针指向这个子类,当被观察的对象属性修改时,通过isa找到子类,在通过子类的方法列表找到对应的set方法,set方法是被重写过得,里面实现了相关的通知。


WechatIMG401.jpeg
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,903评论 1 32
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述? 设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类...
    司马DE晴空阅读 5,176评论 0 7
  • 1.设计模式是什么? 你知道哪些设计模式,并简要叙述?设计模式是一种编码经验,就是用比较成熟的逻辑去处理某一种类型...
    龍飝阅读 6,644评论 0 12
  • 充实的一天 昨天早上 不到5点就起来了,平时没有这样早起来过,好兴奋,新的一天就要开始了,因为早上要去参加杭州...
    Amway博爱阅读 1,351评论 0 0
  • 昨天听了这本书,边听边笑,太懂女人心了,说的就是我吗?原来我后来转变家庭关系是因为阴差阳错用了书里的办法。 男人和...
    双胞胎妈妈_9a17阅读 1,315评论 0 1

友情链接更多精彩内容