iOS在具有强引用的视图控制器之间传递对象

iOS在具有强引用的视图控制器之间传递对象,ios,copy,automatic-ref-counting,strong-references,Ios,Copy,Automatic Ref Counting,Strong References,我有一系列的VC专用于导航堆栈中的概要文件编辑。随着您的深入,将在-prepareforsgue中传递一个自定义对象userProfile。我的问题是,在这个配置中,所有用户配置文件似乎都指向一个对象,如果在对当前配置文件进行更改后按下“上一步”按钮,则父控制器中的配置文件也会更改 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { if ([segue.identifier isEqualT

我有一系列的VC专用于导航堆栈中的概要文件编辑。随着您的深入,将在-prepareforsgue中传递一个自定义对象userProfile。我的问题是,在这个配置中,所有用户配置文件似乎都指向一个对象,如果在对当前配置文件进行更改后按下“上一步”按钮,则父控制器中的配置文件也会更改

 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

     if ([segue.identifier isEqualToString:@"ProfileToEdit"]) {

         EditProfileTableViewController *editProfileVC = [segue destinationViewController];
         editProfileVC.userProfile = self.userProfile;
         editProfileVC.delegate = self;

     }
每个VC都有一个在其.h文件中声明的属性,如下所示:

@property (strong, nonatomic) UserProfile *userProfile;
其中userProfile是一个非常简单的类

@interface UserProfile : NSObject

@property (strong, nonatomic) NSMutableArray *cars;
@property (strong, nonatomic) NSString *phoneNumber;
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *currentPassword;

@end
在我看来,解决方案在于让每个控制器都保存自己的对象副本。 我不知道如何正确地实施它。这能解决我的问题吗

    @property (copy, nonatomic) UserProfile *userProfile;

如果是,我应该如何在我的自定义对象中实现-copy方法,因为它没有一个

查看这篇文章了解复制实现:我觉得有点奇怪,你的应用程序中的任何地方都不应该更改用户配置文件,你为什么要这样做?@Boris Charpentier,正如我所说的,只有当按下后退按钮或手势并且必须放弃更改时才需要。好吧,所以我会将我的用户配置文件放在一个单独的文件中,以便在任何地方访问它,而不是到处传递和复制它。那么你应该有一个放弃更改的聪明方法,我从未使用过它,但iOS中有一个NSUndoManager类可以帮助你you@BorisCharpentier我自己也考虑过单例,但每个人都建议不要仅仅为了在控制器之间传递数据而使用单例。似乎不应该使用单例,除非真的有必要。