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