1

質問がわかりませんでした。次の 2 つのメソッドをテストしてサブクラス インスタンスを作成しました。結果はうまくいきました。たとえば、SingletonSon: Singleton、変更なしのサブクラスで、[SingletonSon sharedInstance] または [SingletonSon alloc] を呼び出すと、Singleton ではなく SingletonSon のインスタンスが返されます。本の元のコンテンツの結果とは対照的に、元の内容は次のように述べています。変更されたサブクラス Singleton でない場合、常に Singleton のインスタンスを返します。

    +(Singleton *) sharedInstance  
    {  
       if(sharedSingleton==nil)  
       {  
          sharedSingleton=[[super allocWithZone:NULL] init];  
       }  
       return sharedSingleton;  
    }

    +(Singleton *) sharedInstance  
    {  
       if(sharedSingleton==nil)  
       {  
          sharedSingleton=[NSAllocateObject([self class],0,NULL) init];  
       }  
       return sharedSingleton;  
    }

私は中国の学生です。私の英語はあまり上手ではありません。許してください。お返事をお待ちしています。

4

1 に答える 1

1

コードはまったくスレッドセーフではないため、「Pro」を削除します。シングルトンを作成する一般的に受け入れられているパターンは次のとおりです。

+(Singleton *)sharedSingleton {

    static dispatch_once_t once;
    static Singleton *sharedSingleton;
    dispatch_once(&once, ^{
        sharedSingleton = [[self alloc] init];
    });
    return sharedSingleton;
}
于 2014-03-04T18:54:32.873 に答える