1.当一个对象第一次被观察时,系统使用runtime机制自动创建一个该类的派生类,在派生类中重写,陪观察属性的setter方法,在setter发布方法中添加通知机制的代码。
2.将对象的isa指针修改为指向派生类,所以对象调用sette方法时就会调用派生类中重写的setter方法。此外派生类还重写了dealloc方法用于释放资源。
手动通知:
- (void)willChangeValueForKey:(NSString *)key;
- (void)didChangeValueForKey:(NSString *)key;
- (void)setValue:(id)value forUndefinedKey:(NSString*)key;
- (id)valueForUndefinedKey:(NSString*)key;
- (void)setNilValueForKey:(NSString*)key;
Collection Operators有3种,分别是:Simple Collection Operators,Object Operators,Array and Set Operators。且操作对象均为数组或集合
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString*)key
+ (NSSet *)keyPathsForValuesAffectingValueForKey:(NSString*)key {
NSSet*keyPaths = [super keyPathsForValuesAffectingValueForKey:key];
if([key isEqualToString:@"fullName"]) {
NSArray*affectingKeys = @[@"givenName",@"familyName"];
keyPaths = [keyPaths setByAddingObjectsFromArray:affectingKeys]
}
return keyPaths;
}