static NSMutableDictionary * allTheSingletons;
@implementation BGSuperSingleton
+(instancetype)singleton
{
return [self singleton1];
}
+(id) singleton1
{
NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
PO(result);
if (result==nil)
{
result = [[[self class] alloc]init];
allTheSingletons[className]=result;
}
return result;
}
BGSuperSingleton 应该是所有单例类的父类。
然后我在其中一个子类中做:
+(NSPredicate *)withinASquare:(double)distance{
CLLocation * anchorWeUsed=[self singleton].mapCenterLocation; //Error map center is not of type ID
return [self withinASquare:distance fromLocation:anchorWeUsed];
}
看起来 CLANG 不明白单例是类型+(instancetype)
,而是认为类型是 id。
我错过了什么?
替换self
为MySubSingletonClass
(这是在编译时已知的)虽然有效。
有什么解释吗?