我不明白一个问题,我测试了以下两个方法来创建一个子类实例,结果运行良好。例如,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;
    }

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

最佳答案

好吧,我将删除“Pro”,因为代码根本不是线程安全的。这是创建单例的普遍接受的模式:

+(Singleton *)sharedSingleton {

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

关于ios - “适用于iOS的Pro Objective-C设计模式”子类化了Singleton困惑,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17714337/

10-08 21:38