iOS Swift - Singleton数据持久性

时间:2016-07-13 09:19:27

标签: ios swift core-data singleton

我正在开发一个应用程序,用于保存有关CoreData和singleton类中登录用户的信息。在用户登录后,我从coredata中获取数据并从单例中设置变量。

我的问题:

如果应用程序收到内存警告问题,并且将释放来自单例的数据,我的应用程序将崩溃。在这种情况下我该怎么办?

谢谢!

2 个答案:

答案 0 :(得分:1)

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
}

默认情况下,您的ViewController将拥有此方法,在您的应用程序崩溃之前,此方法将自动执行,您应该在此方法中编写一些代码,以确保您的数据可以保存在设备中,然后释放它。

答案 1 :(得分:1)

我们假设您在单身的NSArray *myArray文件中有一个名为.m的本地属性,您可以在其中存储所有需要的数据。您需要做的就是在头文件中添加一个方法,如果不是nil则返回该数组,如果nil,则从存储重新加载并返回。
同时覆盖- (void)didReceiveMemoryWarning方法并在发生内存警告时保存数据 以下是使用objective-c编写的示例代码:

//Singleton.h file
- (NSArray *)storedData;

//Singleton.m file
@property NSArray *myArray;
...
- (NSArray *)storedData
{
    if (_myArray == nil)
        _myArray = [self fetchMyArrayFromLocalStorage];

    return _myArray;
}

- (NSArray *)fetchMyArrayFromLocalStorage
{
    //Some code to fetch data from local storage
}

- (void)saveMyArrayToLocalStorage
{
    //Code to save _myArray to local storage
}

- (void)didReceiveMemoryWarning
{
    [self saveMyArrayToLocalStorage];
    _myArray = nil; //Remove array if is needed
    [super didReceiveMemoryWarning];
}

现在,您只需通过调用方法即可获得所需的数据:
[[mySingleton sharedInstance] storedData]