如何在 UIPageViewController 和孩子之间正确传递对象

Posted

技术标签:

【中文标题】如何在 UIPageViewController 和孩子之间正确传递对象【英文标题】:How to correctly pass an object between UIPageViewController and children 【发布时间】:2013-11-09 02:45:32 【问题描述】:

我有一个 PFObject(来自 Parse.com),它作为属性加载到我的 UIPageViewController 上。

Page VC 设置有两个子控制器。两者都需要访问 UIPageViewController 上的对象。

由于对象相当大,我觉得如果每个控制器都持有相同的对象不是最好的。解决这个问题的最佳方法是什么?

目前只有 UIPageViewController 有这个对象。我可以毫无问题地在其他两个控制器上设置相同的属性,但是我对同一个对象有三个引用。有没有一种方法可以将引用保存在一个地方/VC 并从其他地方链接到它。

示例 2(编辑) 例如,如果我有一个具有根控制器的导航控制器。 根视图控制器下载我有问题的 PFObject。

如果对象随后通过以下方式传递给下一个控制器:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
    [super prepareForSegue:segue sender:sender];

    NextViewController *VC = segue.destinationViewController;
    VC.passedObject = self.downloadedObject;

以上是否意味着我将对象的引用传递给新控制器?或者我实际上是在下一个控制器上重新创建对象。

如果我要对导航控制器堆栈上的一组 10-15 个控制器重复上述步骤。我是创建 10-15 个对同一个对象的引用(已经创建了一次),还是每次将它传递给 VC 时都重新创建它。因此有 10-15 个相同对象的副本。

【问题讨论】:

您可以使用委托模式,以便您的孩子可以引用 UIPageViewController 并可以引用其属性。 【参考方案1】:

您似乎对对象和指针的工作方式有不准确的了解。正如您所说,您将拥有对同一对象的三个引用。您不会创建同一对象及其包含的所有数据的三个副本。除非有其他方面,否则您的担忧似乎是没有根据的。

【讨论】:

谢谢,我认为你是对的。您能否确认我对问题的进一步编辑,请进一步解释我的想法。 您能确认一下吗? 您通常只在对对象调用copy 方法或将其传递给定义为使用copy 的属性时创建对象的完整副本。在大多数情况下,您只是传递对同一对象的引用,每个接收者都保留该对象以确保它不会被释放。这是有效的,但如果对象是可变的,则可能会出现问题。在任何情况下,不要相信我的话,自己尝试一下。在调试器中打印或检查这些对象引用的值,并查看哪些指向相同的内存地址。

以上是关于如何在 UIPageViewController 和孩子之间正确传递对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIPageViewController 中更改页面指示器的背景颜色

如何在 UIPageviewcontroller 中实现静态菜单栏?

如何在视图中移动 UIPageViewController 页面控制器按钮的位置

如何在 UIPageViewcontroller 中添加两个视图控制器

如何在 UIPageViewController 中的两个 ViewController 之间传递数据

iOS - 如何在 UIPageViewController 中设置 UIScrollView 以在重新启用后开始滚动