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

例如,
@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会触发吗?
慕码人8056858
浏览 234回答 2
2回答

Qyouu

[[selfmutableArrayValueForKey:@"array"]addObject:object];这个方法可以触发KVO

慕桂英3389331

首先你需要知道属性的本质@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触发的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript