[NSNull new]与[NSNull null]的区别是什么?使用前者是否有误?
[NSNull new] 和 [NSNull null] 的区别及用法分析
核心区别
[NSNull null]是NSNull类官方指定的类方法,专门用于获取该类的唯一单例实例。NSNull本身基于单例模式设计,这个方法能确保每次调用都返回同一个对象。[NSNull new]是[[NSNull alloc] init]的语法糖。由于NSNull的alloc方法内部被实现为返回单例实例,所以调用new也能拿到同一个NSNull对象,但这并非官方推荐的获取方式。
是否属于错误用法?
调用[NSNull new]不会直接引发程序崩溃或功能异常,但属于不规范用法:
- 违背了NSNull类的单例设计初衷,官方明确提供
null类方法作为获取实例的标准入口; - 尽管当前苹果的实现让
alloc返回单例,但如果未来NSNull的内部逻辑变更(可能性极低),new的行为可能偏离预期; - 从代码可读性角度,其他开发者看到
[NSNull null]能立刻理解这是标准用法,而new会引发困惑。
因此建议统一使用[NSNull null]获取NSNull对象,遵循官方设计规范。
内容的提问来源于stack exchange,提问作者Zhentao
相关产品推荐
相关产品推荐

