“Pro的Objective-C设计模式”继承了Singleton的混淆

时间:2013-07-18 04:05:13

标签: ios objective-c design-patterns singleton subclassing

我不明白一个问题,我测试了以下两种方法来创建子类实例,结果运行良好。例如SingletonSon:Singleton,没有任何修改的子类,当你调用[SingletonSon sharedInstance]或[SingletonSon alloc]返回一个实例时,SingletonSon而不是Singleton。与书中原始内容的结果相反,原来说:如果没有修改子类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;  
    }

我是中国学生,我的英语不是很好,希望原谅我。 期待您的回答。

1 个答案:

答案 0 :(得分:1)

好吧,我删除了“Pro”,因为代码根本不是线程安全的。以下是创建单身人士的普遍接受的模式:

+(Singleton *)sharedSingleton {

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