Есть класс Пациент со свойствами:
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) Symptoms *symptoms;
@property (assign, nonatomic) Status status;
@property (weak, nonatomic) id <PatientDelegate> delegate;
Есть класс Симптомы со свойствами:
@property (assign, nonatomic) CGFloat temperature;
@property (assign, nonatomic) BOOL headache;
@property (assign, nonatomic) BOOL stomach_ache;
Оба класса реализуют протокол NSCopying:
- (nonnull id)copyWithZone:(nullable NSZone *)zone {
Patient *newPatient = [[[self class] allocWithZone:zone] init];
[newPatient setName:self.name];
[newPatient setSymptoms:self.symptoms];
[newPatient setStatus:self.status];
[newPatient setDelegate:self.delegate];
return newPatient;
}
- (nonnull id)copyWithZone:(nullable NSZone *)zone {
Symptoms *newSymptoms = [[[self class] allocWithZone:zone] init];
[newSymptoms setTemperature:self.temperature];
[newSymptoms setHeadache:self.headache];
[newSymptoms setStomach_ache:self.stomach_ache];
return newSymptoms;
}
Также есть класс Доктор:
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSMutableArray *history;
- (void)makeNoteIn:(Patient *)patient card:(NSMutableArray *)history;
- (void)report;
Когда пациент выздоравливает, врач вызывает метод makeNoteIn:
- (void)makeNoteIn:(Patient *)patient card:(NSMutableArray *)history {
Patient *newRecord = [patient copy];
[history addObject:newRecord];
}
После того, как запись сделана, все свойства пациента возвращаются к исходным значениям. Пока мы находимся в методе makeNoteIn, и текущий пациент обработан, в истории есть ссылка на этот объект, который имеет правильные значения свойств. Как только мы выйдем из метода или начнем лечение другого пациента, все значения свойств будут сброшены до начального значения.
Я пытался реализовать копирование, но что-то все равно не так.
![Describing of Patient and Symptoms classes](https://i.stack.imgur.com/5sLoS.jpg)
![Situation when link on object was added to history, and object has right values](https://i.stack.imgur.com/Y7bh4.png)
![Situation when we went out from method makeNoteIn and objects has initial (wrong) values in history array](https://i.stack.imgur.com/0rHla.png)