例如,@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 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
首先你需要知道属性的本质@property(copy)NSMutableArray*array;这个属性添加以后,用起来好像是一个变量,其实编译器做的不仅仅是添加了一个变量:1.添加了一个类全局变量NSMutableArray*_array2.添加了Get方法-(NSMutableArray*)array;3.添加了Set方法-(void)setArray:(NSMutableArray*)array;分析你的代码[meaddObserver:selfforKeyPath:@"array"options:Old|Newcontext:NULL];其实是侦听了MyClass.setArray:方法,MyClass.setArray:方法被调用时,才会触发回调。所以你修改数组里面的数据,是不会引起KVO触发的。
添加回答
举报
0/150
提交
取消