Weak singleton「弱引用単例」

1089 ワード

原文リンク1原文リンク2の一般的な一例は、作成された後もメモリの中で存続する.例えば、ステップ登録の過程において、複数ページの情報共有のために作成された一例は、アクセスされると存続する.実際には、この情報は、その後のソフトウェアの使用過程においては不要である、これはある程度メモリの使用の浪費をもたらすが、弱い引用例はこの問題を解決し、彼の特別な点は、この例を使用するすべてのオブジェクトが解放された後、単例オブジェクト自体も解放されることである.
+ (id)sharedInstance {
    static __weak ASingletonClass *instance;
    ASingletonClass *strongInstance = instance;
    @synchronized(self) {
        if(strongInstance == nil) {
            strongInstance = [[[self class] alloc] init];
            instance = strongInstance;
        }
    }
    return strongInstance;
}

以下のコードを分析します.
  • instance:静的局所変数、生存周期はプログラム実行期間全体
  • である.
  • strongInstance:ローカル変数、生存期間は関数実行期間
  • 次のプログラムの実行シーンをシミュレートします.
    ASingletonClass A = [ASingletonClass sharedInstance];
     //       ASingletonClass  ,instance        
    ASingletonClass B = [ASingletonClass sharedInstance]; 
    // instance    ASingletonClass       
    A = nil;
    B = nil; 
    //ASingletonClass      instance   ,   
    

    Weak singletonは簡単で巧みにweak特性を利用しており、instanceを誰も使用していない後に自動的に破棄され、sharedInstanceが再び呼び出されるとinstanceが再作成されます.以上