Wrap the methods with will/did Access/Change ValueForKey:, and also use KVC to set primitive values:- (NSString *) name { [self willAccessValueForKey: @"name"]; NSString *string = [self primitiveValueForKey: @"name"]; [self didAccessValueForKey: @"name"]; } // name - (void) setName: (NSString *) x { [self willChangeValueForKey: @"name"]; [self setPrimitiveValue: x forKey: @"name"]; [self didChangeValueForKey: @"name"]; } // setName