保持对iOS应用程序所需数据的引用的最佳方式

时间:2014-01-04 23:43:31

标签: ios objective-c properties reference

我在导航层次结构和标签栏控制器中嵌入了许多视图控制器。所有视图控制器的相似之处在于它们都需要访问相同的数据对象。在我的app委托中,我创建了数据对象并创建了UITabBarController所需的初始视图控制器。

现在我有了一个选择。我需要整个应用程序中的所有视图控制器都能够引用该数据对象。视图控制器也需要能够读取和写入数据。因此,一个选项是在每个视图控制器上都有一个数据属性,每当创建一个新的视图控制器时,该属性就被设置为引用该数据。

例如在每个视图控制器上:

@property (strong, nonatomic) ApplicationData *data; //This is the method I am using currently

因此,使用此方法,当我在AppDelegate中实例化第一个视图控制器时,我会将这些视图控制器(除了标签栏控制器和uinavigationcontrollers)'ApplicationData属性设置为此创建的数据对象在我的申请代表中。

我的第二个选择是在ApplicationData属性上创建AppDelegate对象,允许我通过应用程序单例的委托访问数据。

例如:

AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
//then
data = appDelegate.data;

环顾StackOverflow,我已经看到这两种方法都成功使用,并且两种方法都取得了成功。

我的问题:其中一种方法有明显优势吗?如果没有,有什么优点和缺点以及推荐的做法是什么?或者是否有更好的方法来传递我不知道的数据?

1 个答案:

答案 0 :(得分:0)

在分配视图控制器的新实例时,请考虑传递数据变量。将变量放入app delegate有一些缺点。

  1. 将数据放入app delegate后,您的数据将保留在内存中的应用程序级别,直到您的应用程序终止。

  2. 假设显示数据数组的firstviewcontroller和secondviewcontroller删除所选数据。当你回到firstviewcontroller时,可能会有不一致。