我也是新來這個,所以我不能完全肯定我的答案,但據我所知,你是正確的。
- (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