gpt4 book ai didi

ios - 这个 dispatch_once 单例可以返回 nil 吗?

转载 作者:行者123 更新时间:2023-11-29 12:19:18 24 4
gpt4 key购买 nike

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

是否存在下面的单例模式可能返回 nil 的情况?

+ (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;
}

最佳答案

如果你没有做一些奇怪的事情,那就不。

有两种情况会返回 nil:

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

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

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

关于ios - 这个 dispatch_once 单例可以返回 nil 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31100616/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com