为什么我偶尔会收到此错误?

时间:2014-03-27 03:59:55

标签: objective-c xcode5

NSString* className = NSStringFromClass([self class]);

if (!allTheSingletons)
{
    allTheSingletons = NSMutableDictionary.dictionary;
}

id result = allTheSingletons[className];

enter image description here

所有看似非常规则的代码都不会出错。变量allTheSingletons包含7个键/值对,其中一个是className。

即使字典没有className,key,也就是BGMDCRManagedObjectContextThreadHandler,它应该只返回nil。

然而我得到的,偶尔是

enter image description here

这是所有TheSingletons的声明

static NSMutableDictionary * allTheSingletons;

2 个答案:

答案 0 :(得分:1)

你可以做的是运行乐器,看看是否有东西被释放和释放。 看起来你需要检查字典是否为nil,如果是,则返回nil。 如果它不是零,您可以检查它是否有一个与您要求的密钥相匹配的密钥。如果没有,请返回nil。

如果你不想返回nil那么你需要通过创建它来确保它不是nil,然后如果它是nil则访问它。

您可能还会确保访问它时不仅不是nil,而是确保您对它有强烈的引用。 使它成为一个强大的财产。

答案 1 :(得分:1)

我不确定,但如果这些代码将在多个线程中执行,请使其成为线程安全的。

static dispatch_once_t onceToken ;
dispatch_once(&onceToken, ^{
    allTheSingletons = [NSMutableDictionary dictionary] ;
}) ;