2013-07-18 124 views
1

我沒有理解一個問題,我測試了以下兩種方法來創建子類實例,結果運行良好。例如SingletonSon:Singleton,子類沒有任何修改,當你調用[SingletonSon sharedInstance]或[SingletonSon alloc]返回一個實例是SingletonSon而不是Singleton。與書中原始內容的結果相反,原文說:如果沒有修改的子類Singleton,總是返回Singleton的一個實例。「針對iOS的Pro Objective-C設計模式」繼承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; 
    } 

我是中國學生,我的英語不太好,希望原諒我。 期待您的回答。

回答

1

嗯,我會刪除「Pro」,因爲代碼根本不是線程安全的。以下是創建單身人士普遍接受的模式:

+(Singleton *)sharedSingleton { 

    static dispatch_once_t once; 
    static Singleton *sharedSingleton; 
    dispatch_once(&once, ^{ 
     sharedSingleton = [[self alloc] init]; 
    }); 
    return sharedSingleton; 
} 
+0

不錯,使用GCD.Thank你。 –