为了账号安全,请及时绑定邮箱和手机立即绑定

KVO观察的是对象指针的变化,还是对象内容的变化?

KVO观察的是对象指针的变化,还是对象内容的变化?

慕码人8056858 2019-04-13 08:36:26
例如,@interfaceMyClass:NSObject@property(copy)NSMutableArray*array;@end@implementationMyClass@end@implementationOtherClass{MyClass*me;}-(instancetype)init{self=[superinit];[meaddObserver:selfforKeyPath:@"array"options:Old|Newcontext:NULL];returnself;}@end以上代码中,当array指针指向新的NSMutableArray时,KVO会被触发。那么问题来了,当array的内容变化时,例如发生[arrayaddObject:@1024]这样的情况时,KVO会触发吗?
查看完整描述

2 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

[[selfmutableArrayValueForKey:@"array"]addObject:object];
这个方法可以触发KVO
                            
查看完整回答
反对 回复 2019-04-13
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

首先你需要知道属性的本质
@property(copy)NSMutableArray*array;
这个属性添加以后,用起来好像是一个变量,其实编译器做的不仅仅是添加了一个变量:
1.添加了一个类全局变量NSMutableArray*_array
2.添加了Get方法-(NSMutableArray*)array;
3.添加了Set方法-(void)setArray:(NSMutableArray*)array;
分析你的代码
[meaddObserver:selfforKeyPath:@"array"options:Old|Newcontext:NULL];
其实是侦听了MyClass.setArray:方法,MyClass.setArray:方法被调用时,才会触发回调。所以你修改数组里面的数据,是不会引起KVO触发的。
                            
查看完整回答
反对 回复 2019-04-13
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信