2012-10-27 13 views
9

私はデータをデータベースに書き込むまでデータを蓄積するシングルトンクラスを持っています(このようなことを実装する理由を知りたい場合はhereを参照してください)。データを保存したら、シングルトンを破壊したいと思います。 ARCでどうすればいいですか?それとも、私は妄想的で、私はそれをまったく破壊する必要がありますか?iOS:ARCでシングルトンを破壊するにはどうすればよいですか?したほうがいい?

*これはthisの質問と重複していると言えるかもしれませんが、ここで受け入れられる回答は参考になるほど具体的ではありません。それは"明示的に呼び出すメソッド/関数を宣言することができます。この外観のコードはどのようなものでしょうか?メソッドの外でオブジェクトを解放できない場合、メソッド内でオブジェクトをどのようにプルすることができますか?また、 "と言います。最も簡単な方法は、静的なC++クラスを保持してから、デストラクタで解放することです"私はC++については分かりませんが、実際にはC++クラスをアプリケーションコードに入れることはできますか?

私のシングルトンはそうのように実装されている:

+(NHCFamilyStatus *)familyStatus 
{ 
    static dispatch_once_t pred; 
    static NHCFamilyStatus *familyStatusSharedObject=nil; 

    dispatch_once(&pred,^
    { 
     familyStatusSharedObject = [[NHCFamilyStatus alloc] init]; 
    }); 

    return familyStatusSharedObject; 
} 
+1

[この投稿は正しくシングルトンを実装するとして、それを参照してください、あなたを助ける] [1] [1]:http://stackoverflow.com/questions/7598820/correct-singleton- pattern-objective-c-ios – chrislhardin

+0

なぜデータを含むバッファだけでなく、シングルトンを破壊するのですか? – Jano

+0

@Janoどうすればそのバッファを破壊するかも説明できますか? – cmac

答えて

19

あなたはこのシングルトンを破棄した場合、あなたは再びそれを作成することはできないでしょう(つまりdispatch_onceコールが何を意味するのかです)。

シングルトンを破壊するにはが必要です。あなたが必要としなくなったインスタンス変数を削除するシングルトンのメソッドを是非用意してください。他に何もする必要はありません。

+0

もちろん、(再:dispatch_once)私が許して、インスタンス変数を無効にすることはメモリを解放するために有益ですか? – cmac

+0

また、作業中のデータを保存しているので、状態をリセットします。 – jrturton

+0

@jrturtonあなたの答えがシングルトンオブジェクトを破壊することができるかどうかは分かりません。あなたは「このシングルトンを破壊することはできません」と言い、「シングルトンを破壊する必要はありません」と言います。私の経験では、それらを破壊することが可能であり、そのような必要性は珍しく、前述のように、最初にdispatch_once()内に作成された場合は再作成できません。ただ答えを出そうとしている、あなたに挑戦しているわけではありません:) – pnizzle

関連する問題