1

アプリを最初に作成したとき、すべてのランタイムカスタムオブジェクトとプロパティをアプリデリゲートに保存して、ビュー間で共有できるようにしました。私はこれが好きではなく、常に変更したいと思っていたので、今日読んで、すべてのランタイムプロパティとオブジェクトを次のようなシングルトンオブジェクトに移動しました。

@synthesize gblStr;

+(AppDataSingleton *)singleObj
{
    static AppDataSingleton * single=nil;

    @synchronized(self)
    {
        if(!single)
        {
            single = [[AppDataSingleton alloc] init];
        }  
    }    
    return single;
}

ここで、gblStrには、シングルトンを持つ任意のViewControllerからアクセスできます。

これはうまく機能し、すべてのオブジェクトをアプリデリゲートではなくここに保存するようになりました。

各ViewControllerに、プロパティを追加します。

AppDataSingleton *globalSingleton; 

そして、viewDidLoadで、それをインスタンス化します。

globalSingleton = [AppDataSingleton singleObj];

私の質問は: ユーザーがアプリに戻ってきて、シングルトンが破壊された場合はありますか?これを確認する必要がありますか?

または、破壊された場合、アプリを最初からやり直すのでしょうか?

4

2 に答える 2

2

アプリがクラッシュしたり実行を停止したりすると、シングルトンは破棄されます。オブジェクトを永続ストア(CoreData、.plist、SQLiteなど)に書き込まない限り、オブジェクトも再作成する必要があります...

于 2012-05-24T20:37:20.357 に答える
1

私の見解では、シングルトンはプログラムの実行中(つまりセッション全体)持続するはずです。アクティブにクリアしていない場合は、アプリが非アクティブ状態から戻るたびにそのデータが存在するはずです。いずれの場合も、オブジェクトがnilであるかどうかを確認し、nilである場合は再インスタンス化するため、データを再水和する必要があります。

データが存在しないことが懸念される場合は、データをCoreDataまたはサンドボックスに積極的に永続化する必要があります。

于 2012-05-24T20:37:55.037 に答える