Нет, ваша реализация не на 100% правильная. Подумайте, что произойдет, если для firstName в данный момент задан экземпляр NSString, и установщик вызывается с тем же тем же экземпляром. Сначала вы отпустите экземпляр, затем установите переменную экземпляра, которая в этом случае ничего не изменит, а затем попытаетесь сохранить экземпляр, но к тому времени он уже вполне может быть отменен.
Должно быть:
- (void)setFirstName:(NSString*)firstNameValue {
[self willChangeValueForKey:@"firstName"];
[firstNameValue retain];
[firstName release];
firstName = firstNameValue;
[self didChangeValueForKey:@"firstName"];
}
или
- (void)setFirstName:(NSString*)firstNameValue {
if (firstNameValue != firstName) {
[self willChangeValueForKey:@"firstName"];
[firstName release];
firstName = firstNameValue;
[firstName retain];
[self didChangeValueForKey:@"firstName"];
}
}
Последняя версия имеет дополнительное преимущество, заключающееся в том, что она не отправляет уведомления oberserver, если значение на самом деле не изменилось.