如何在多个视图控制器之间全局共享数据

Posted

技术标签:

【中文标题】如何在多个视图控制器之间全局共享数据【英文标题】:How to share data globally among multiple view controllers 【发布时间】:2010-10-21 16:05:19 【问题描述】:

谁能帮帮我...

我在模型中有一个巨大的对象。我把它作为一个单吨类并返回对象wn其他调用。但是对象非常大,那是应用程序正在崩溃。没有返回如何全局共享数据以及何时分配对象以及在何处释放对象。我不需要视图控制器中对象中的所有数据..我需要从该对象到视图控制器的特定数据...

谢谢。

【问题讨论】:

你说的是什么数据? 确保单例实际上是单例,否则您将拥有相同模型的多个实例。尽管如此,如果应用程序由于模型的内存占用而被终止,您只能通过减小模型的大小和/或在内存中加载必要的位来避免问题。如果它是一个巨大的图像,将其拆分为多个图块。如果您要实例化和堆叠大量视图控制器,请确保实施适当的内存管理(即在 viewDidUnload 中释放保留的视图):它可能无法解决问题,但可以缓解它。 这就是我的意思。如果模型太大,您需要一种不同的方法,例如平铺或数据库或... @Joseph:数据是一个包含对象的数组。每个对象是一个包含音频文件、图像、网络视图的课程 对我来说这听起来你应该重新考虑你的策略。让 Singleton 提供这样的复杂对象没有任何意义。 【参考方案1】:

您可以将指向它的指针存储在您的应用委托中并使用检索它

BlahAppDelegate* delegate = [[UIApplication sharedApplication] delegate];
id bigObject = delegate.bigObject;

由于应用代理的寿命比视图控制器长,您不必担心它的保留和释放。

单例类应该类似地工作,只要单例实例方法(检索一个创建的实例)在实例返回之前调用保留实例。当视图被解除分配时,请确保在实例上调用 release。

【讨论】:

以上是关于如何在多个视图控制器之间全局共享数据的主要内容,如果未能解决你的问题,请参考以下文章

你如何在 UIKit 视图控制器和它呈现的 SwiftUI 视图之间共享数据模型?

无法在选项卡视图控制器之间共享数据?

如何从容器/父视图控制器和多个子视图控制器共享数据数组

在多个子类之间共享故事板视图控制器

SAIKU UI 在视图之间共享全局变量

14.vuex和localStorage,全局变量的区别