NSString* className = NSStringFromClass([self class]);
if (!allTheSingletons)
{
allTheSingletons = NSMutableDictionary.dictionary;
}
id result = allTheSingletons[className];
所有看似非常规则的代码都不会出错。变量allTheSingletons包含7个键/值对,其中一个是className。
即使字典没有className,key,也就是BGMDCRManagedObjectContextThreadHandler,它应该只返回nil。
然而我得到的,偶尔是
这是所有TheSingletons的声明
static NSMutableDictionary * allTheSingletons;
答案 0 :(得分:1)
你可以做的是运行乐器,看看是否有东西被释放和释放。 看起来你需要检查字典是否为nil,如果是,则返回nil。 如果它不是零,您可以检查它是否有一个与您要求的密钥相匹配的密钥。如果没有,请返回nil。
如果你不想返回nil那么你需要通过创建它来确保它不是nil,然后如果它是nil则访问它。
您可能还会确保访问它时不仅不是nil,而是确保您对它有强烈的引用。 使它成为一个强大的财产。
答案 1 :(得分:1)
我不确定,但如果这些代码将在多个线程中执行,请使其成为线程安全的。
static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
allTheSingletons = [NSMutableDictionary dictionary] ;
}) ;