ARC странное поведение копирует значение в дочерний вид, а не сохраняет его - PullRequest
1 голос
/ 31 марта 2012

У меня проблема. Похоже, ARC синхронизирует мое свойство с дочерним классом. Вот код

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"tableView:didSelectRow: %i", indexPath.row);

    JobDetailViewController *jdViewController=[[JobDetailViewController alloc] initWithNibName:@"JobDetailViewController" bundle:nil];
    jdViewController.delegate=self;
    [jdViewController setJob:[[jobsWithPipes objectAtIndex:indexPath.row] job]];
    [self.navigationController pushViewController:jdViewController animated:YES];
}

Проблема в том, что свойство jdViewController's job синхронизируется с [[jobsWithPipes objectAtIndex:indexpath.row] job]. Все свойства nonatomic, retain. Когда я изменяю свойство NSNumber* foreman в jdViewController, новое значение копируется в родительский контроллер представления. Зачем? Похоже, что ARC использует копирование вместо сохранения на этих объектах. Помогите мне, пожалуйста

1 Ответ

4 голосов
/ 31 марта 2012

Я думаю, что ваше понимание retain и copy обратное.

С помощью свойства retain, когда вы присваиваете ему значение, оно получает указатель на тот же объект, который вы присвоили,Поэтому, если вы изменяете один объект, он изменяет другой.

Со свойством copy, когда вы присваиваете ему значение, он получает копию объекта.Таким образом, объекты будут идентичны, но различны.Когда вы изменяете один объект, он не будет изменять другой.

...