[NSApplication sharedApplication] 可以返回 nil 吗?

Can [NSApplication sharedApplication] ever return nil?

提问人:user16217248 提问时间:10/3/2022 最后编辑:user16217248 更新时间:4/14/2023 访问量:378

问:

在 Objective-C 的 MacOS 应用程序中,是否有可能返回,或者这是一个安全的假设,它永远不会返回?[NSApplication sharedApplication]nilnil

文档描述了以下行为:

返回应用程序实例,如果尚不存在,则创建它。

然而:

  • 有没有可能创建失败?例如,如果无法分配对象的内存?NSApplication
  • 如果这种意外错误阻止了对象的创建,框架会自动检测到这一点并崩溃而不是返回?nil
  • 我不能有把握地假设在 Swift 中,非可选保证在 Objective-C 等价物中不返回,如这个例子NSApplication.sharedNULL

因此,以下陈述是否有任何作用,或者这是多余的?作为一名 C 程序员,我们被教导要非常小心地检查内存分配或其他可能失败的操作,即使失败的可能性越来越小。但这种担忧是否适用于?ifNULL[NSApplication sharedApplication]

#import <Cocoa/Cocoa.h>
int main() {
    if (![NSApplication sharedApplication]) {
        return -1;
    }
    // ...
    [NSApp run];
}

我的目标是编写绝对正确的代码,而不仅仅是在几乎所有情况下都足够好,同时保持尽可能简洁。

objective-c macOS nsapplication 防御性编程

评论

0赞 vadian 10/3/2022
描述是否回答了您的问题?返回应用程序实例,如果尚不存在,则创建它。
0赞 user16217248 10/3/2022
@vadian 它会以某种方式无法创造它吗?
1赞 vadian 10/3/2022
不,它不能。在 Swift 中,它返回一个非可选的。

答:

1赞 Mojtaba Hosseini 10/3/2022 #1

sharedApplication正如代码所说,_Nonnull正如文档所描述的那样:

总结:

返回应用程序实例,如果尚不存在,则创建它。

来源: sharedApplication

评论

0赞 user16217248 10/11/2023
这个答案可以通过来源、证明或引用来改进,因为当我跳到 .sharedApplication_NonnullsharedApplication
0赞 Mojtaba Hosseini 10/11/2023
@user16217248 您没有看到,因为头文件已审核。因此,任何简单的指针类型都将被假定为 .这是有关它的更多信息_NonnullNS_HEADER_AUDIT_BEGIN(nullability, sendability)nonnull