当我第一次创建应用程序时,我将所有运行时自定义对象和属性存储在我的应用程序委托中,以便我可以跨视图共享它们。我从来都不喜欢这个并且总是想要改变它所以我今天做了一些阅读并将所有运行时属性和对象移动到单个对象,如下所示:
@synthesize gblStr;
+(AppDataSingleton *)singleObj
{
static AppDataSingleton * single=nil;
@synchronized(self)
{
if(!single)
{
single = [[AppDataSingleton alloc] init];
}
}
return single;
}
其中,我们可以从具有单例的任何视图控制器访问gblStr。
这很有效,我现在将所有对象存储在此处,而不是存储在我的应用代理中。
在每个视图控制器中,我添加了属性:
AppDataSingleton *globalSingleton;
并在viewDidLoad中,我实例化它:
globalSingleton = [AppDataSingleton singleObj];
我的问题是: 是否会出现用户返回应用程序且单例已被销毁的情况?我需要检查一下吗?
或者,如果它被销毁,它会从头开始启动应用程序吗?
答案 0 :(得分:2)
如果应用程序崩溃或停止运行,单例将被销毁。除非您将对象写入持久性存储(CoreData,.plist,SQLite等),否则您还必须重新创建对象...
答案 1 :(得分:1)
在我看来,单身人士应该在程序运行的整个过程中持续存在(即整个会话)。如果您没有主动清除它,那么只要应用程序从非活动状态返回,该数据就应该存在。在任何情况下,您都在检查对象是否为nil,如果是,则重新实例化,因此数据应该被重新水化。
如果您担心数据不存在,您应该主动将其持久保存到CoreData或沙箱。