1

没看懂一个问题,我测试了下面两种方法创建子类实例,结果运行良好。比如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;  
    }

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

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 回答