为啥有些方法需要在m文件里实现和有些需要实例对象来调用?

来源:8-4 手动调用KVO

慕设计0203943

2019-05-18

比如:
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
-(void)didChangeValueForKey:

这俩方法。

写回答

2回答

逆风

2019-05-19

没有太明白您的意思,尝试作答下:

  1. person的观察对象(observer)是其自身,当系统监听到对象属性值的变化之后会调用observeValueForKeyPath ofObject context函数。需要自己在observer里实现它。当然observer也可以设置成其它对象。

  2. 你可以看看系统提供的@interface NSObject(NSKeyValueObserverNotification)API说明,我觉得监听实例的属性,实例对象来调用也很nice。其实你也可以试试用类对象来调用,与其对应的是类属性,我记得类属性在课程里有说明,注意类属性需要实现其相对应set、get方法。只要您明白了类的本质,这些应该都不是问题。祝您好运。


0
1
慕设计0203943
#手动掩面表情# 这个是我自己学着学着搞糊涂了,忽然的迷糊。。。m文件里是对方法的实现,调用方法是run这个方法。 我得重新复习下前面的内容。。。
2019-05-19
共1条回复

逆风

2019-05-19

还有,这里是手动调用KVO,这样可以在Setter方法里,定制我们需要的功能。如果不手动的话,是不需要

willChangeValueForKey和didChangeValueForKey方法的。


0
0

面试跳槽提升必备 全面解析iOS中的Runtime机制

高薪职位,复杂业务需求,高性能APP,Runtime技术不可不学。

275 学习 · 48 问题

查看课程