2012-03-31 4 views
1

問題があります。 ARCは私のプロパティを子クラスと同期させるようです。 ここで問題がjdViewController'sジョブプロパティは[[jobsWithPipes objectAtIndex:indexpath.row] job]と同期することで、コード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]; 
} 

です。プロパティはすべてnonatomic, retainです。 jdViewControllerNSNumber* foremanプロパティを変更すると、新しい値が親ビューコントローラにコピーされます。どうして? ARCはこのオブジェクトにretainの代わりにcopyを使用しているようです。助けてください

答えて

4

retaincopyのあなたの理解は後になります。

retainプロパティでは、値を割り当てると、割り当てられた同じオブジェクトへのポインタが取得されます。したがって、あるオブジェクトを変更すると、他のオブジェクトが変更されます。

プロパティーにcopyプロパティを指定すると、その値に値を割り当てると、そのオブジェクトのコピーが取得されます。したがって、オブジェクトは同一ですが、区別されます。 1つのオブジェクトを変更すると、は `tになります。

+0

[copy setPicture:[[UIImage allocWithZone:zone] initWithCGImage:[self.picture CGImage]]; 'これは' copyWithZone'のコードの一部です。そうですか? – Oleg

+1

私は考えていません - 私はより多くの文脈を必要とします。また、 'copy'はオブジェクトのひどい名前です。 – yuji

関連する問題