You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

[NSNull new]与[NSNull null]的区别是什么?使用前者是否有误?

[NSNull new] 和 [NSNull null] 的区别及用法分析

核心区别

  • [NSNull null] 是NSNull类官方指定的类方法,专门用于获取该类的唯一单例实例。NSNull本身基于单例模式设计,这个方法能确保每次调用都返回同一个对象。
  • [NSNull new] 是[[NSNull alloc] init]的语法糖。由于NSNull的alloc方法内部被实现为返回单例实例,所以调用new也能拿到同一个NSNull对象,但这并非官方推荐的获取方式。

是否属于错误用法?

调用[NSNull new]不会直接引发程序崩溃或功能异常,但属于不规范用法:

  1. 违背了NSNull类的单例设计初衷,官方明确提供null类方法作为获取实例的标准入口;
  2. 尽管当前苹果的实现让alloc返回单例,但如果未来NSNull的内部逻辑变更(可能性极低),new的行为可能偏离预期;
  3. 从代码可读性角度,其他开发者看到[NSNull null]能立刻理解这是标准用法,而new会引发困惑。

因此建议统一使用[NSNull null]获取NSNull对象,遵循官方设计规范。

内容的提问来源于stack exchange,提问作者Zhentao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 12:24:51