Objective c 将数据传递到rootViewController的最优雅方式

Objective c 将数据传递到rootViewController的最优雅方式,objective-c,uinavigationcontroller,Objective C,Uinavigationcontroller,我必须在navigationController中将数据从第三个viewController传递到rootViewController 我想这样做: A=rootViewController和B=lastViewController 在B中,我插入如下方法: -(void)load:(A father)f { self.father = f; // where father is a retain property } 然后,当我在A中分配B时,在推它之前,我将调用load方法 行吗

我必须在navigationController中将数据从第三个viewController传递到rootViewController

我想这样做:

A=rootViewController和B=lastViewController 在B中,我插入如下方法:

-(void)load:(A father)f
{
   self.father = f;  // where father is a retain property
}
然后,当我在A中分配B时,在推它之前,我将调用load方法

行吗

还有别的办法吗?(还有全局变量和单例,我不想要这两个,因为我的内存中有很多数据)


谢谢你的帮助。

有些人说单身是邪恶的,但我认为他们是有目的的——但对你来说,我会同意你的观点。这是在控制器和模型之间处理数据的最佳方法

  • 长期和更合适的方式:协议和授权

    • 您的rootViewController B必须实现一个协议,然后在lastViewController中您必须声明该协议的委托,然后调用类似lastViewController.myDelegate=myParent的东西

    • 如果您想模块化组件,这很有用,但是根据经验,有些类的功能非常具体,创建协议只是延长了传输数据这一基本需求的过程。在这种情况下,我建议您使用#2

  • 捷径:你说什么

    • …但我更喜欢在初始化时传递父类。例如,initWithParent:[myParent],但那只是我。也不要从子类中保留父类。只允许父类保留其子类,否则将出现内存管理问题。这种方法的缺点是,如果控制器变得复杂,以后很难分离它们的逻辑,以防需要分离它们,就像在另一个项目中重复使用一个组件一样

  • 请注意:不要将父类保留在其子类中,如果它们都持有彼此的副本,它们将永远不会被释放。我的首选是创建一个指定的初始值设定项,并将ParentViewController作为参数(
    -(id)initWithParentViewController:(id)viewController;
    )。事实上,正如苹果在文档中所写,通常孩子不应该保留自己的父母。