我也是新来这个,所以我不能完全肯定我的答案,但据我所知,你是正确的。
- (NSString *)fullName
{
[self willAccessValueForKey:@"fullName"];
NSString *tmp = [self primitiveFullName];
[self didAccessValueForKey:@"fullName"];
if (!tmp) {
tmp = [NSString stringWithFormat:@"%@ %@", [self firstName], [self lastName]];
[self setPrimitiveFullName:tmp];
}
return tmp;
}
- (void)setFirstName:(NSString *)aFirstName
{
[self willChangeValueForKey:@"firstName"];
[self setPrimitiveFirstName:aFirstName];
[self didChangeValueForKey:@"firstName"];
[self setPrimitiveFullName:nil];
}
- (void)setLastName:(NSString *)aLastName
{
[self willChangeValueForKey:@"lastName"];
[self setPrimitiveLastName:aLastName];
[self didChangeValueForKey:@"lastName"];
[self setPrimitiveFullName:nil];
}
+ (NSSet *)keyPathsForValuesAffectingFullName
{
return [NSSet setWithObjects:@"firstName", @"lastName", nil];
}
嗨马克。感谢您的回应。我唯一的问题与你对[self primitiveFullName:nil]和[self primitiveFullName:tmp]的调用有关。如果用户可以访问您的值的唯一方式是通过您的getter,并且getter总是返回正确的值,那么为什么您要关心为transient属性存储的内容?请注意,我怀疑你这样做是绝对正确的......我只是在钓鱼,看看我是否错过了这一切的微妙之处。 – wayne 2011-05-18 07:14:22
嗨马克。另外,出于好奇,为什么你能够使用下面的形式:[self setPrimitiveFirstName:aFirstName]来设置原始值,而我被迫使用下面的形式:[self setPrimitiveValue:aFirstName forKey:@“firstName”]?再一次,只是钓鱼! – wayne 2011-05-18 07:40:21
哎呦。没有意识到我使用的是primitiveFullName:而不是setPrimitiveFullName: – 2011-05-18 08:26:02