1

当我第一次创建我的应用程序时,我将所有运行时自定义对象和属性存储在我的应用程序委托中,以便我可以跨视图共享它们。我从不喜欢这个并且一直想改变它,所以我今天做了一些阅读并将我所有的运行时属性和对象移动到一个单例对象,如下所示:

@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];

我的问题是: 是否会出现用户返回应用程序并且单例已被销毁的情况?我需要检查这个吗?

或者,如果它被破坏了,它会从头开始重新启动应用程序吗?

4

2 回答 2

2

如果应用程序崩溃或停止运行,单例将被销毁。除非您将对象写入持久存储(CoreData、.plist、SQLite 等...),否则您还必须重新创建对象...

于 2012-05-24T20:37:20.357 回答
1

在我看来,单例应该在程序运行的整个生命周期(即整个会话)中持续存在。如果您没有主动清除它,那么只要应用程序从非活动状态返回,该数据就应该在那里。在任何情况下,您都在检查对象是否为 nil,如果是则重新实例化,因此应该重新水化数据。

如果您担心数据不存在,您应该积极地将其持久化到 CoreData 或沙箱中。

于 2012-05-24T20:37:55.037 回答