Ios 这个单亲家庭能返回零吗?

Ios 这个单亲家庭能返回零吗?,ios,objective-c,grand-central-dispatch,Ios,Objective C,Grand Central Dispatch,试图找到我们间歇性遇到的问题,该问题似乎发生在内存不足的设备上。可疑原因是NSDateFormatter单例为零 下面的单例模式是否可能返回零 + (NSDateFormatter *)dateFormatterUTC { static NSDateFormatter *formatter; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ formatter = [[

试图找到我们间歇性遇到的问题,该问题似乎发生在内存不足的设备上。可疑原因是NSDateFormatter单例为零

下面的单例模式是否可能返回零

+ (NSDateFormatter *)dateFormatterUTC {

    static NSDateFormatter *formatter;
    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{
        formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat=@"yyyy-MM-dd HH:mm:ss ZZZ";
    });

    return formatter;
}

如果你没有做什么奇怪的事,那么就没有

在两种情况下,这可能返回零:

  • alloc或init方法在实例化日期格式化程序时返回nil。如果没有更多的堆内存可用,则可能发生这种情况。但在这种情况下,您的程序很可能会崩溃。大多数Objective-C代码(可能包括Apple框架)都是在堆内存无法耗尽的假设下编写的

  • 有人用nil重写了静态指针,但保留了onceToken。这不太可能是偶然发生的,但并非不可能。像这样的内存损坏bug可能还会破坏其他东西,导致应用程序崩溃


  • 因此,出于所有实际目的,您可以假设您的函数将始终返回有效对象。如果您确实想确保在返回之前也可以添加断言

    据我所知,不,我的singleton将保留一辈子,但如果日期格式化程序不能正确解析日期格式,它可以返回一个nil日期一般来说,我会说不,但没有任何强制执行的保证alloc将返回非nil,所以,你知道,这是可能的。。。但实际上没有。