我在导航层次结构和标签栏控制器中嵌入了许多视图控制器。所有视图控制器的相似之处在于它们都需要访问相同的数据对象。在我的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,我已经看到这两种方法都成功使用,并且两种方法都取得了成功。
我的问题:其中一种方法有明显优势吗?如果没有,有什么优点和缺点以及推荐的做法是什么?或者是否有更好的方法来传递我不知道的数据?
答案 0 :(得分:0)
在分配视图控制器的新实例时,请考虑传递数据变量。将变量放入app delegate有一些缺点。
将数据放入app delegate后,您的数据将保留在内存中的应用程序级别,直到您的应用程序终止。
假设显示数据数组的firstviewcontroller和secondviewcontroller删除所选数据。当你回到firstviewcontroller时,可能会有不一致。